详细请参考:https://www.cnblogs.com/Neeo/articles/11212368.html
1、列表的基本操作
1>创建列表
在Python中,用一对中括号[]
来表示列表(list),用,
分割列表内的每个元素。
li = []
print(li) # []
print(type(li)) # <class 'list'>
print(list('dsdfgfrwe')) # ['d', 's', 'd', 'f', 'g', 'f', 'r', 'w', 'e']
print(list(range(10))) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(range(1,11))) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(range(1,11,2))) #[1, 3, 5, 7, 9]
练习:打印1--100之间的奇数
for i in range(1,101,2):
print(i)
2>列表的合并(拼接):+
合并(拼接)就是将两个列表合为一个新列表,原有列表不变。
li_1 = [1, 2, 3]
li_2 = ['a', 'b', 'c']
li_3 = li_1 + li_2
print(li_3) # [1, 2, 3, 'a', 'b', 'c']
3>列表的重复
重复可以理解为将原列表复制指定次数,然后相加得到一个新的列表。
li_1 = [1, 2, 3]
li_2 = li_1 * 3
print(li_2) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
4>列表成员资格判断:in,not in
li = ['a', 'b', 'we', 2, 5]
print('a' in li) # True
print('w' not in li) # True
print(5 not in li) # False
print('we' in li) # True
5>通过索引或切片取值
lis = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# 从索引为3的值
print(lis[3]) # d
# 从指定索引位置开始取值
print(lis[3:]) # ['d', 'e', 'f', 'g']
# 取列表内的一段元素
print(lis[3:6]) # ['d', 'e', 'f']
# 每隔两个取一个
print(lis[1:6:2]) # ['b', 'd', 'f']
# 取索引为-2的元素
print(lis[-2]) # f
# 从左向右取,从0开始,取到倒数第二个之前的
print(lis[:-2]) # ['a', 'b', 'c', 'd', 'e']
# 反转列表
print(lis[::-1]) # ['g', 'f', 'e', 'd', 'c', 'b', 'a']
6>for循环取值
lis = [ 'e', 'f', 'g']
for i in lis:
print(i)
#执行结果
e
f
g
7>列表元素更新
lis = [ 'e', 'f', 'g']
print(lis,id(lis)) #['e', 'f', 'g'] 2365512770120
lis[2]='wwj'
print(lis,id(lis)) #['e', 'f', 'wwj'] 2365512770120
注:通过指定的索引修改列表中对应的元素,并且通过打印结果发现,当列表内的元素被修改后,列表的内存地址不变。
8>删除列表(元素)
li = ['b', 'a', 'c', 'f', 'd']
del li[0], li[2]
print(li) # ['a', 'c', 'd']
2、列表的常用方法
2.1 list.append(obj)
将一个对象(元素)追加到列表的末尾,并且是原地操作列表,没有返回值
li =[1,2]
li.append('abc')
print(li) #[1, 2, 'abc']
2.2 list.insert(index,obj)
将一个对象(元素)插入到列表的指定索引的前面,并且是原地操作列表,没有返回值
li = ['a', 'b', 'c', 'd']
li.insert(1, 1)
print(li) # ['a', 1, 'b', 'c', 'd']
注:在指定索引的前面插入一个元素,后面的元素都要往后移动一位,如果列表长度很长的话,会对性能有所影响。
2.3 list.pop([obj])
移除列表中的指定索引位置的元素,若不指定索引,默认移除列表尾部的元素,并且将列表返回
li = ['a', 'b', 'c', 'd']
li.pop() # 不指定默认移除最后一个
print(li) # ['a', 'b', 'c']
print(li.pop(0)) # 移除指定的元素 a
print(li) # ['b', 'c']
2.4 list.remove(obj)
删除列表中的指定元素,不指定或指定元素不存在报错,而且仅是删除操作,没有返回值。
li = ['a', 'b', 'c', 'd']
li.remove('a')
li.remove('c')
print(li) #['b', 'd']
li.remove(1) #ValueError: list.remove(x): x not in list
注:list.remove(obj)和list.pop([obj])的区别?
- list.remove(obj)只能通过元素删除,不能通过索引删除
- list.pop([obj])只能通过索引删除
2.5 list.reverse()
反转列表,并没有参数和返回值,只是在原地对列表中的元素进行反转。
li = ['b', 'a', 'c', 'f', 'd']
print(li[::-1]) # ['d', 'f', 'c', 'a', 'b']
li.reverse()
print(li) # ['b', 'a', 'c', 'f', 'd']
2.6 list.sort(key=None, reverse=False)
原地对列表进行排序,key是自定义的排序算法,此函数在每次元素比较时被调用,reverse表示排序方式,默认的false是按照升序进行排序的,当reverse=True时,排序结果为降序。
li = ['b', 'a', 'c', 'f', 'd']
li.sort() # 顺序,['a', 'b', 'c', 'd', 'f']
print(li)
li.sort(reverse=True) # 倒序,['f', 'd', 'c', 'b', 'a']
print(li)
注:sorted(key=None, reverse=False)函数,它是Python内置的对于所有序列类型进行排序的函数,而不像sort()方法是列表独有的排序方法。
二者区别是:
- sort方法仅能对列表进行原地排序,没有返回值。
- sorted函数对所有序列类型进行排序,并且并不是原地排序,它会返回排序结果,也就是说我们可以通过一个变量接收排序结果。
3、列表总结
3.1 列表中常用的操作符
操作符(表达式) | 描述 | 重要程度 |
---|---|---|
+ | 合并 | ** |
* | 重复 | ** |
in | 成员资格 | **** |
for i in [1, 2, 3]:print(i) | 迭代 | ***** |
list[2] | 索引取值 | ***** |
list[start:stop:step]、list[::-1] | 切片(截取) | ***** |
3.2 列表中的常用方法:
方法 | 描述 | 重要程度 |
---|---|---|
list.append(obj) | 列表添加元素到末尾 | ***** |
list.insert(index,obj) | 列表添加元素到指定位置 | ***** |
list.pop(obj) | 删除列表元素 | ***** |
list.remove() | 删除列表元素 | ***** |
list.reverse() | 反转列表的元素 | **** |
list.sort() | 排序 | *** |
list(seq) | 将序列转换为列表 | ***** |
list.extend(seq) | 列表末尾追加多个值 | *** |
list.count(obj) | 统计某个字符在列表内出现的次数 | **** |
list.index(obj) | 找出指定元素的第一个匹配项的索引位置 | *** |
3.3 可以应用于列表的其他置函数或者声明语句
函数 | 描述 | 重要程度 |
---|---|---|
len(list) | 返回列表的元素个数 | ***** |
max(list) | 返回列表内最大的元素 | ** |
min(list) | 返回列表内最小的元素 | ** |
cmp(list1, list2) | 比较两个列表的元素 | ** |
del obj1, obj2 | 删除列表的元素 | **** |
练习题:
1>写代码,有如下列表,按照要求实现每一个功能
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
# 计算列表的长度并输出
print("列表的长度:{}".format(len(li)))
# 列表中追加元素"seven",并输出添加后的列表
li.append('seven')
print("列表中追加元素'seven'之后,显示为:{}".format(li))
# 请在列表的第1个位置插入元素"Tony",并输出添加后的列表
li.insert(0, 'Tony')
print("列表的第1个位置插入元素'Tony',显示为:".format(li))
# 请修改列表第2个位置的元素为"Kelly",并输出修改后的列表
li[2] = 'Kelly'
print("修改列表第2个位置的元素为'Kelly',显示为:".format(li))
# 请将列表l2=[1,"a",3,4,"heart"]的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
l2 = [1, "a", 3, 4, "heart"]
print(li + l2)
# 请将字符串s = "qwert"的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
s = "qwert"
print(li + list(s))
# 请删除列表中的元素"ritian",并输出添加后的列表
li.remove("ritian")
print(li)
# 请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表
new_li = li[2]
li.remove(new_li)
print("列表中的第二个元素:{}".format(new_li))
print(li)
# 请删除列表中的第2至4个元素,并输出删除元素后的列表
new_li = li[2: 4]
print("第2至4个元素:{}".format(new_li))
for item in new_li:
li.remove(item)
print("删除第2至4个元素之后的列表:{}".format(li))
# 请将列表所有得元素反转,并输出反转后的列表
li.reverse()
print(li)
# 请计算出"alex"元素在列表li中出现的次数,并输出该次数。
print(li.count("alex"))
2>写代码,有如下列表,利用切片实现每一个功能
liqs = [1, 3, 2, "a", 4, "b", 5, "c"]
# 通过对li列表的切片形成新的列表liq1,liq1 = [1,3,2]
print(liqs[:3])
# 通过对li列表的切片形成新的列表liq2,liq2 = ["a",4,"b"]
print(liqs[3:6])
# 通过对li列表的切片形成新的列表liq3,liq3 = ["1,2,4,5]
print(liqs[::2])
# 通过对li列表的切片形成新的列表liq4,liq4 = [3,"a","b"]
print(liqs[1:6:2])
# 通过对li列表的切片形成新的列表liq5,liq5 = ["c"]
print(liqs[len(liqs) - 1:])
# 通过对li列表的切片形成新的列表liq6,liq6 = ["b","a",3]
print(liqs[::-1][2::2])
扩展:list递归调用
1>将列表中的数字3变成字符串"100"。
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
def fun_str(li):
#定义变量从0开始
num = 0
for item in li:
# 判断是否是列表
if isinstance(item, list):
return fun_str(item)
else:
if item == 3:
li[num] = 100
num += 1
#调用函数
fun_str(lis)
print(lis)
#执行结果
[2, 100, 'k', ['qwe', 20, ['k1', ['tt', 100, '1']], 89], 'ab', 'adv']
2>将列表lis中的"tt"变成大写。
# # 方法1:能实现,但嵌套特别多的时候,就很麻烦,并且不灵活
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
lis[3][2][1][0] = lis[3][2][1][0].upper()
print(lis)
#执行结果:[2, 3, 'k', ['qwe', 20, ['k1', ['TT', 3, '1']], 89], 'ab', 'adv']
# 方法2:递归循环
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
def fun_str(li):
#定义变量从0开始
num = 0
for item in li:
#判断是否是列表
if isinstance(item, list):
return fun_str(item)
else:
if item == "tt":
li[num] = li[num].upper()
num += 1
#调用函数
fun_str(lis)
print(lis)
#执行结果
[2, 3, 'k', ['qwe', 20, ['k1', ['TT', 3, '1']], 89], 'ab', 'adv']
未完……
网友评论