python-列表一序列基础-修改元素-del删除元素-Python List sort()方法


列表基础(sequence)

一序列

序列是Python中最基本的一种数据结构。

序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(即索引)并且序列中的数据会按照添加的顺序来分配索引。

数据结构指计算机中数据存储的方式。

例如:有一个字符串为‘abcd’,在计算机存储时,字符串是以序列的方式进行存储的。除了有特定的id、类型type以及值value之外;这个字符串里面的每个字母都有对应的索引值。
如下图所示,字符串‘abcd’,其中每个字母分别对应一个索引值,如果是从左往右(正序),abcd分别对应0、1、2、3的索引值。若从右往左(逆序),abcd则分别对应-1、-2、-3、-4这些索引值,也就是有一个位置。

在这里插入图片描述
也就是说,字符串是以一定顺序的序列进行存储的,并有固定的索引值,这就是字符串可以通过索引值来截取的原因。

(二)序列的分类

可变序列(序列中的元素可以改变):例如 列表(list)
不可变序列(序列中的元素不能改变):例如 字符串(str)和元组(tuple)
例如·:以下列表1,这个列表的每个元素都可以进行增删改查的操作。(下面会说到这些基本操作)
-list1=[1,2,3,4,5,[a,b]]
而对于字符串来说,里面的元素不能进行增加或者删除这些操作,除非是通过字符串的截取方式来重新获取一个变量。

列表的格式

[数据1,数据2,数据3,…]

列表的使用

列表推导式

  • 利用for循环创建列表
li = list()
for i in range(5):
    li.append(i)
print(li)
输出;[0,1,2,3,4]
  • 列表推导式
li = [b for b in range(5)]
print(li)
输出:[0,1,2,3,4]

创建列表

  • 列表是由一系列特定顺序排序的元素组成,在python中,列表用方括号[ ]表示,并用逗号分隔其中的元素。
i = ['栗子','核桃','花生']
print(i)
# 输出:['栗子','核桃','花生']

访问列表

  • 在python中,第一个列表元素的索引为0,而不是1。
i = ['栗子', '核桃', '花生']
print(i[1])
# 输出 : 核桃
  • 访问最后一个列表元素通过将索引指定为-1,可返回最后一个列表元素。
i = ['栗子', '核桃', '花生']
print(i[-1])
# 输出 : 花生

列表的增,删,改,查

修改元素

i = ['栗子', '核桃', '花生']
i[-1] = '我原来是花生-现在是花生米'
print(i[-1])
### 输出:我原来是花生-现在是花生米

添加元素

  • append() 方法用于在列表末尾添加新的对象。
i = ['栗子', '核桃', '花生']
i.append('碧根果')
print(i)
# 输出:['栗子', '核桃', '花生', '碧根果']

在列表中插入元素

  • insert() 函数用于将指定对象插入列表的指定位置。该方法没有返回值,但会在列表指定位置插入对象。
语法 :insert()方法语法:
           list.insert(index, obj)
参数    index -- 对象 obj 需要插入的索引位置。
           obj -- 要插入列表中的对象。
i = ['栗子', '核桃', '花生']
i.insert(1, '我是插入的碧根果')
print(i)
# 输出: ['栗子', '我是插入的碧根果', '核桃', '花生']

拼接列表

  • (+)号可以将两个列表拼接成一个列表
i = ['栗子', '核桃', '花生']
n = ['酸奶', '早餐奶', '安慕希']
ni = n + i
print(ni)
# 输出: ['酸奶', '早餐奶', '安慕希', '栗子', '核桃', '花生']
  • (*)号可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
i = ['栗子', '核桃', '花生']
n = i * 2
print(n)
# 输出:['栗子', '核桃', '花生', '栗子', '核桃', '花生']

del删除元素

  • del可删除任意位置的列表元素,但你必须知道要删除的值的索引
i = ['栗子', '核桃', '花生']
del i[1]
print(i)
# 输出: ['栗子', '花生']

pop()删除元素

pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

i = ['栗子', '核桃', '花生']
n = i.pop(-1)
print(n)
# 输出: 花生   (被删除的返回值)

remove() 方法用于移除集合中的指定元素。

  • 该方法不同于 discard() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
  • 没有返回值。
  • remove()只删除第一个指定的值
i = ['栗子', '核桃', '花生', '核桃']
i.remove('核桃')
print(i)
输出: ['栗子', '花生']

copy()方法 拷贝

  • 拷贝以后删除原来的列表不受影响,拷贝以后是一个独立的列表ID都不一样
i = ['栗子', '核桃', '花生']
a = i.copy()
print(i)
print(a)
# 输出: 
8372 -- d:\python\python\ceshi.py "
['栗子', '核桃', '花生']
['栗子', '核桃', '花生']

Python index() 方法检测字符串中是否包含子字符串 str

  • 如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
    • str.index(str, beg=0, end=len(string))
    • str – 指定检索的字符串
    • beg – 开始索引,默认为0。
    • end – 结束索引,默认为字符串的长度。
  • 如果包含子字符串返回开始的索引值,否则抛出异常。
str1 = "this is string example....wow!!!"
str2 = "exam"
print(str1.index(str2))
print(str1.index(str2, 10))
print(str1.index(str2, 10, 32))
print(str1.index('fe', 10, 32))
lens = len(str1)
print(lens)
print(str1.index('fe', 10, 32))   # 找不到汇报错

排序

Python List sort()方法

  • sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
    • 语法:
list.sort(cmp=None, key=None, reverse=False)
  • 参数:
    • cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
  • 返回值
    • 该方法没有返回值,但是会对列表的对象进行排序。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
aList = ['123', 'Google', 'Runoob', 'Taobao', 'Facebook']
aList.sort()
print("List : ")
print(aList)
aList.sort(reverse=True)  # 降序排列
print(aList)
# 输出:
# ['123', 'Facebook', 'Google', 'Runoob', 'Taobao']
# ['Taobao', 'Runoob', 'Google', 'Facebook', '123']

Python sorted() 函数

  • sorted() 函数对所有可迭代的对象进行排序操作。
  • sort 与 sorted 区别:
    • sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
    • list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
      sorted 语法:
sorted(iterable, cmp=None, key=None, reverse=False)
  • 参数说明:
    • iterable – 可迭代对象。
    • cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
      reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
  • 返回值
  • 返回重新排序的列表。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = [5,7,6,3,4,1,2]
b = sorted(a)  # 保留元列表
print(a)
print(b)
# 输出:
[5, 7, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7]

Python List reverse()方法

  • reverse() 函数用于反向列表中元素。
    – 该方法没有返回值,但是会对列表的元素进行反向排序。
  • reverse()方法语法:
list.reverse()
#!/usr/bin/python

aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.reverse()
print("List :", aList)
输出: List : ['xyz', 'abc', 'zara', 'xyz', 123]

Python List len()方法

  • len() 方法返回列表元素个数。
  • 语法:len(list) list – 要计算元素个数的列表。
  • 返回列表元素个数。
#!/usr/bin/python

list1, list2 = [123, 'xyz', 'zara'], [456, 'abc']
print("First list length : ", len(list1))
print("Second list length : ", len(list2))

# 输出:
First list length :  3
Second list length :  2

Python count()方法

  • Python count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
  • count()方法语法:
str.count(sub, start= 0,end=len(string))
  • 参数
    • sub – 搜索的子字符串
    • art – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
    • end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
  • 该方法返回子字符串在字符串中出现的次数。
#!/usr/bin/python

str = "this is string example....wow!!!"
sub = "i"
print("str.count(sub, 4, 40) : ", str.count(sub, 4, 40))
sub = "wow"
print("str.count(sub) : ", str.count(sub))
输出: 
str.count(sub, 4, 40) :  2
str.count(sub) :  1

列表切片

• 语法: 列表[起始 : 结束 : 步长]
• 如果开始位置和结束位置都省略, 则则会从第一个元素开始截取到最后一个元素
• 步长表示每次获取元素的间隔,默认是1(可以省略不写)
• 步长不能是0,但可以是是负数

list1 = ['Google', 'Runoob', 'Taobao', '126']
print(list1[2])  # 读取列表中第三个元素
print(list1[-1])  # 读取列表中倒数第一个元素
print(list1[0:2:1])  # 从第0个元素开始到第三个(布长1)截取列表
print(list1[::2]) 
# 输出: 
Taobao
126
['Google', 'Runoob']
['Google', 'Taobao']

in用来检查指定元素在列表当中

li = ['bmw', 'audi', 'toyota', 'subaru']
print('bmw' in li)
输出:True

not in 用来检查指定元素是否不在列表当中

li = ['bmw', 'audi', 'toyota', 'subaru']
print('bmw' not in li)
输出:Flase

小实验

a = [1,2,3,4,5,6] 用多种方式实现列表的反转([6,5,4,3,2,1])

  • 排序并进行反转
a = [1, 2, 3, 4, 5, 6]
a.sort(reverse=True)
print(a)

  • 直接反转列表
a = [1, 2, 3, 4, 5, 6]
a.reverse()
print(a)
  • 逆序切片
a = [1, 2, 3, 4, 5, 6]
a = a[:: -1]
print(a)

  • 创建一个空列表,遍历列表a中的元素插入到b列表的第一位
a = [1, 2, 3, 4, 5, 6]
b = []
for i in a:
    b.insert(0, i)
print(b)
a = b
print(a)

猜数字游戏

  • 给用户9次机会 猜1 - 10 个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
import random

b = 0
while b < 9:  # 用户有9次机会
    a = int(input('请输入1-10其中一个数字'))  # 用户输入数字
    c = random.randint(1, 10)  # 电脑随机数字
    while a == c:  # 用户和电脑进行判断 猜对电脑重新进行随机
        c = random.randint(1, 10)  # 电脑重新随机数字
        continue  # 重新进行循环判断
    else:  # 直到不相等
        print('随机数字{0},你猜错了,还有{1}次机会'.format(c, 8 - b))
    b += 1  # 用户次数加1

获取内容相同的连个列表的元素

lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
for i in lst1:
    if i in lst2:
        print(i)

现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中

```c
import random

teachers = ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh']
offices = [[], [], []]
for name in teachers:
    num = random.randint(0, 2)
    offices[num].append(name)
i = 1
for office in offices:
    print(f'办公室{i}的人数是{len(office)}.老师分别是:', end='')
    i += 1
    for name in office:
        print(name, end='...')
    print('')


#   输出:每次都不一样-可能会有的教室没有老师的情况
办公室1的人数是1.老师分别是:hh...
办公室1的人数是3.老师分别是:bb...ee...gg...
办公室1的人数是4.老师分别是:aa...cc...dd...ff...

输入姓名如果列表中存在则提示用户重新输入

name_list = ['Tom', 'lily', 'Rose']
name = input('请输入您的名字:')
while True:
    if name in name_list:
        print(f'您输入的名字是{name}, 名字已经存在,请重新输入')
        name = input('请输入您的名字:')
    else:
        print(f'您输入的名字是{name}, 可以使用')
        break

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guofeng80

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值