list 列表
list
字符串、列表互转
print("abc#def#gd".split("#")) # ['abc', 'def', 'gd'] print(''.join(['abc', 'def', 'gd'])) # abcdefgd
a = list('abracadabra')
print(a) # ['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']
cat = ['fat', 'black', 'loud', 'aa']
size, color, *disposition = cat
print(disposition) # ['loud', 'aa']
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ] tinylist = [123, 'runoob'] print (list) # 输出完整列表 print (list[0]) # 输出列表第一个元素 print (list[1:3]) # 从第二个开始输出到第三个元素 print (list[2:]) # 输出从第三个元素开始的所有元素 print (tinylist * 2) # 输出两次列表 print (list + tinylist) # 连接列表
与Python字符串不一样的是,列表中的元素是可以改变的:
>>> a = [1, 2, 3, 4, 5, 6] >>> a[0] = 9 >>> a[2:5] = [13, 14, 15] >>> a [9, 2, 13, 14, 15, 6] >>> a[2:5] = [] # 将对应的元素值设置为 [] >>> a [9, 2, 6]
列表的一些骚操作:
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
# list[0] = []
# print(list) # [[], 786, 2.23, 'runoob', 70.2]
# list[0:1] = []
# print(list) # [786, 2.23, 'runoob', 70.2]
# list[0:3] = []
# print(list) # ['runoob', 70.2]
# list[0:3] = "a"
# print(list) # ['a', 'runoob', 70.2]
# list[0:3] = 'a', 'b', 'c'
# print(list) # ['a', 'b', 'c', 'runoob', 70.2]
# list[0:3] = ['a', 'b', 'c']
# print(list) # ['a', 'b', 'c', 'runoob', 70.2]
# list[0:3] = ('a', 'b', 'c')
# print(list) # ['a', 'b', 'c', 'runoob', 70.2]
# list[0:3] = {'a', 'b', 'c'}
# print(list) # ['a', 'b', 'c', 'runoob', 70.2]
# print(list[-1::-1]) # [70.2, 'runoob', 2.23, 786, 'abcd'] 反转
print(list('abcde')) # ['a', 'b', 'c', 'd', 'e']
print(list(Test())) # 这个方法同样适用于tuple set 。Test是一个迭代器(iterator,)有 __iter__(self) __next__(self)这两个方法的类都是iterator
print(list(range(10))) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
列表推导式
list = [x ** 2 for x in range(10) if x % 2 == 0] print(list) # [0, 4, 16, 36, 64]
列表排序
1、随机排序
说明:下面的方法tuple不可以,因为tuple的值不可以改变;set不可以,因为set无序
import random l = [1, 2, 3, 4] random.shuffle(l) print(l) # [4, 1, 3, 2]
2、按规则排序
a = [1, 51, 31, -3, 10] a.sort() print(a) # [-3, 1, 10, 31, 51] b = ['a', 'ab', '3ae', 'zaaa', '1'] b.sort() # ['1', '3ae', 'a', 'ab', 'zaaa'] print(b) c = ['a', 'ab', '3ae', 'zaaa', '1'] c.sort(key=len) # ['a', '1', 'ab', '3ae', 'zaaa'] print(c)
c = ['a', 'ab', '3ae', 'zaaa', '1']
c.sort(key=lambda s:len(s), reverse=True) # ['zaaa', '3ae', 'ab', 'a', '1']
print(c)
class SD(): def __init__(self, n, a): self.name = n self.age = a # 下面的类方法用于排序 def comp(obj): print(obj.age) return obj.age # 按年龄排序 sds = [SD('tnajgun', 93), SD('xiaodong', 16), SD(n='dsadfg', a=88)] sds.sort(key=SD.comp) for sd in sds: print(sd.name, sd.age)
浅复制和深度复制
import copy l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] l2 = copy.copy(l1) # 浅复制 l1.append('abc') l1[0].append('a') l1[1] = [1, 1, 1] print(l1) # [[1, 2, 3, 'a'], [1, 1, 1], [7, 8, 9], 'abc'] print(l2) # [[1, 2, 3, 'a'], [4, 5, 6], [7, 8, 9]] l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] l3 = copy.deepcopy(l1) # 深度复制 l1.append('abc') l1[0].append('a') l1[1] = [1, 1, 1] print(l1) # [[1, 2, 3, 'a'], [1, 1, 1], [7, 8, 9], 'abc'] print(l3) # [[1, 2, 3, 'a'], [4, 5, 6], [7, 8, 9]]
列表常用方法:
| 方法 | 描述 |
|---|---|
| list.append(x) | 把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。 |
| list.extend(L) | 通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。 |
| list.insert(i, x) | 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。 |
| list.remove(x) | 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。 |
| list.pop([i]) | 从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。) |
| list.clear() | 移除列表中的所有项,等于del a[:]。 |
| list.index(x) | 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。 |
| list.count(x) | 返回 x 在列表中出现的次数。 |
| list.sort() | 对列表中的元素进行排序。 |
| list.reverse() | 倒排列表中的元素。 |
| list.copy() | 返回列表的浅复制,等于a[:]。 |
另:全局函数del()可以删除list的某些元素 和删除实体变量:del a
>>> a = [-1, 1, 66.25, 333, 333, 1234.5] >>> del a[0] >>> a [1, 66.25, 333, 333, 1234.5] >>> del a[2:4] >>> a [1, 66.25, 1234.5] >>> del a[:] >>> a [] >>> del a
遍历列表:
s = list('abcdefg') for i in s: print(i, end=',') # a,b,c,d,e,f,g, print() for i in range(len(s)): print(i, s[i], sep=":", end=',') # 0:a,1:b,2:c,3:d,4:e,5:f,6:g, print() for i in enumerate(s): print(i, end=',') # (0, 'a'),(1, 'b'),(2, 'c'),(3, 'd'),(4, 'e'),(5, 'f'),(6, 'g'),
附:list作用堆栈(右边添加右边弹出)使用效率很高,但是作用队列(左边添加左边弹出)效率就会降低,因为左边添加和弹出要移动所有元素,这时候我们可以使用deque
list 有的方法 deque都有,但是deque多了几个...left()方法
import collections de = collections.deque([1,2,3]) de.append() de.appendleft() de.extend() de.extendleft() de.pop() de.appendleft()

浙公网安备 33010602011771号