Python-列表和元组

列表list

  • 不固定大小
  • 类型可以不一样

长度和索引访问和字符串一样

>>> L = ['a', 'b', 123]
>>> L
['a', 'b', 123]
>>> len(L)
3
>>> L[0:-1]
['a', 'b']

嵌套

M = [[1, 2, 3],
     [2, 3, 3],
     [3, 4, 5, 6],
     ]

列表解析

M = [[1, 2, 3],
     [2, 3, 3],
     [3, 4, 5, 6],
     ]
col2 = [row[1] for row in M]

print(col2)  # [2, 3, 4]

遍历M,每一行赋值给row,取出每个row中的[1]组成列表。

第二列的每个值加1:

M = [[1, 2, 3],
     [2, 3, 3],
     [3, 4, 5, 6],
     ]
col2 = [row[1] + 1 for row in M]

print(col2)  # [3, 4, 5]

取出第二列是偶数的:

M = [[1, 2, 3],
     [2, 3, 3],
     [3, 4, 5, 6],
     ]
col2 = [row[1] for row in M if row[1] % 2 == 0]

print(col2)  # [2, 4]

取出矩阵对角线上的值:

M = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9],
     ]
diag = [M[i][i] for i in [0, 1, 2]]

print(diag)  # [1, 5, 9]

重复字符串中的字符:

doubles = [s * 2 for s in 'hello']

print(doubles)  # ['hh', 'ee', 'll', 'll', 'oo']

输出两个字符串的交集:

s1 = "SPAM"
s2 = "SCAM"
intersect = [x for x in s1 if x in s2]
print(intersect) # ['S', 'A', 'M']

遍历

list = [2, 3, 1]
for item in list:
	print item  # 2 3 1

for i in range(len(list)):
	print i, ":", list[i]  # 0:2, 1:3, 2:1

for i, item in enumerate(list):
	print i, ":", item  # 0:2, 1:3, 2:1

拷贝

>>> L1 = [2, 3, 4]
>>> L2 = L1[:]
>>> L1[0] = 24
>>> L1
[24, 3, 4]
>>> L2
[2, 3, 4]

和Go不同的是,L1[:]是复制了L1, L1和L2指向了不同的内存区域。

list与字符串的转换:

>>> s = "abc"
>>> L = list(s)
>>> L
['a', 'b', 'c']
>>> L[0] = 'd'
>>> L
['d', 'b', 'c']
>>> s = ''.join(L)
>>> s
'dbc'

增加元素

合并两个列表

L1 + L2

>>> L1 = [0, 1]
>>> L2 = [3, 4]
>>> L1 + L2
[0, 1, 3, 4]

重复列表元素n次

L1 * 3

>>> L1 = [1, 2]
>>> L1 * 3
[1, 2, 1, 2, 1, 2]

append

>>> L = [1, 2]
>>> L.append([3, 4])
>>> L
[1, 2, [3, 4]]

用分片模拟append():

L[len(L):] = [X] 在后端插入

L[:0] = [X] 在前端插入

extend

>>> L = [1, 2]
>>> L.extend([3, 4])
>>> L
[1, 2, 3, 4]

判断

是否包含某个元素

>>> 1 in L1
True

分片赋值

>>> L = [1, 2, 3]
>>> L[1:3] = [4, 5, 6]
>>> L
[1, 4, 5, 6]
>>> L[3:] = []
>>> L
[1, 4, 5]
>>> L[1:2] = [6, 7, 8]
>>> L
[1, 6, 7, 8, 5]

对于L[1:3] = [4, 5, 6]首先删除L[1:3],然后将[4, 5, 6]插入到L[0]之后,类似链表。

如果等号前后出现重叠也是可以的,python会先计算出右边的值然后再删除左边的值:

>>> L = [1, 2, 3, 4]
>>> L[0:3] = L[1:4]
>>> L
[2, 3, 4, 4]

分片是复制了一遍:

t = [1, 2, 3]
t2 = t[:]
t2[0] = 4
# 此时t[0]没有变

排序

list = [2, 3, 1]
list.sort()
print list  # [1, 2, 3]

某个元素出现的次数

t = [1, 1, 3, 4, 3]
t.count(1)  # 2

元组tuple

  • 不可变
  • 任意类型
>>> T = (1, 2, 3)
>>> len(T)
3
>>> T[1]
2
>>> T + (4, 5)
(1, 2, 3, 4, 5)
>>> T[1] = 9  # 不能改变元组中元素的值
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
>>> (1, 2) * 4
(1, 2, 1, 2, 1, 2, 1, 2)
>>> T = (1, 2, 3, 4)
>>> T[1:3]
(2, 3)

元组也可以不加括号:

>>> x = 1,2,3
>>> x
(1, 2, 3)

加括号的不一定是元组:

>>> x = (1)  # 这是数字1
>>> x
1
>>> x = (1,)  # 加 ',' 是为了避免歧义,强制认为这是元组
>>> x
(1,)

转载于:https://my.oschina.net/u/2004526/blog/777042

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值