python嵌套list
A. python 嵌套list
defiseven(l):
foriinl:
ifi%2:
returnFalse
returnTrue
defonly_evens(ll):
r=[]
foriinll:
ifiseven(i):
r.append(i)
returnr
printonly_evens([[1,2,4],[4,0,6],[22,4,3],[2]])
Python 2.7 执行结果
[[4, 0, 6], [2]]
其中 iseven 函数判断 list 是不是都是偶数
B. Python 嵌套的列表推导式怎么理解的呢
5.1.4. 嵌套的列表推导式
列表解析中的第一个表达式可以是任何表达式,包括列表解析。
考虑下面有三个长度为 4 的列表组成的 3x4 矩阵:
>>> matrix = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]
现在,如果你想交换行和列,可以用嵌套的列表推导式:
>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
像前面看到的,嵌套的列表推导式是对 for 后面的内容进行求值,所以上例就等价于:
>>> transposed = []
>>> for i in range(4):
... transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
反过来说,如下也是一样的:
>>> transposed = []
>>> for i in range(4):
... # the following 3 lines implement the nested listcomp
... transposed_row = []
... for row in matrix:
... transposed_row.append(row[i])
... transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
在实际中,你应该更喜欢使用内置函数组成复杂流程语句。对此种情况 zip() 函数将会做的更好:
>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
C. Python中嵌套list使用append的问题
你这样写代码会把脑袋绕晕
请举一个有点实际意义的例子(用有意义的变量名)
D. list可以嵌套吗 python
可以
>>> a=[]
>>> a.append(a)
>>> a
[[...]]
E. python 将两个list合并成为一个嵌套的list
1可以使用"+"号完成操作
输出为:
[1, 2, 3, 8, 'google', 'com']
2.使用extend方法
、
输入相同
3使用切片
输出相同
PS:len(l1)代表要将l2插入l1中的位置
例如
输出为:
又如:
输出为:
总结:第一种方方法思路比较清晰,就是运算符的重载;第二种方法比较简洁,但会覆盖原始list;第三种方法功能比较强大,可以将一个列表插入另一个列表的任意位置
F. python 将两个list合并成为一个嵌套的list
除了直接相加(生成新的list),还有两种方法(修改其中一个list):
用list的extend方法,L1.extend(L2),该方法将参数L2的全部元素添加到L1的尾部,例如:
1
2
3
4
5
>>> L1 = [1, 2, 3, 4, 5]
>>> L2 = [20, 30, 40]
>>> L1.extend(L2)
>>> L1
[1, 2, 3, 4, 5, 20, 30, 40]
用切片(slice)操作,L1[len(L1):len(L1)] = L2和上面的方法等价,例如:
1
2
3
4
5
6
>>> L1 = [1, 2, 3, 4, 5]
>>> L2 = [20, 30, 40]
>>> L1[len(L1):len(L1)] = L2
>>>
>>> L1
[1, 2, 3, 4, 5, 20, 30, 40]
但切片方法用起来更灵活,可以插入到头部,或其他任意部位,例如:
加到开头:
1
2
3
4
5
>>> L1 = [1, 2, 3, 4, 5]
>>> L2 = [20, 30, 40]
>>> L1[0:0] = L2
>>> L1
[20, 30, 40, 1, 2, 3, 4, 5]
加到中间:
1
2
3
4
5
6
>>> L1 = [1, 2, 3, 4, 5]
>>> L2 = [20, 30, 40]
>>>
>>> L1[1:1] = L2
>>> L1
[1, 20, 30, 40, 2, 3, 4, 5]
参考
1.《python libarary referece》5.6.4. Mutable Sequence Types:
(oschina文档镜像地址)http://tool.oschina.net/uploads/apidocs/python2.7.3/library/stdtypes.html#mutable-sequence-types
G. python 嵌套list读取
b1=[[2]*3]*2
b2=[[2,2,2],[2,2,2]]
这个两个定义的变量其实时不一样的
b2一个list,包含两个list元素
b1是1个list元素的两个浅拷贝,可以理解成两个指向[2]*3的指针。
出现这种问题,实际上理解的误区,[2]*3
=
[2,2,2]
就想当然的把[[2]*3]*2=
[2,2,2]*2
=
[[2,2,2]
[2,2,2]]
其实[[]]是一个list的浅拷贝(或者理解成指向list指针)
更详细的可以看下python的文档,里面有说明。
H. 如何使用Python3实现嵌套List中的元素两两相乘
一、
AList=[[5,8],[3,6],[4,5],[3,8],[6,2]]
foriinrange(len(AList)):
AList.append(AList[0][0]*AList[0][1])
temp=AList.pop(0)
print("AList="+str(AList))
二、
AList=[[5,8],[3,6],[4,5],[3,8],[6,2]]
foriinAList:
AList_Fist.append(i[0])
print("AList_Fist="+str(AList_Fist))
I. python 嵌套list读取
a=[['1','2','3'],['5','6','7']]
a[0]#['1','2','3']
a[0][1]#'2'
J. python 解嵌套的list
importitertools
lst_all=[['A','Blue'],['A','Green'],['A','Yellow'],['B','Red'],['C','Red'],['C','White']]
collector=[]
fork,lstgroupinitertools.groupby(sorted(lst_all),lambdax:x[0]):
collector.append([k,','.join([c[1]forcinlstgroup])])
printcollector