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()

 

posted @ 2020-09-30 06:37  老谭爱blog  阅读(156)  评论(0)    收藏  举报