给出一个包含子列表的列表,我想提取具有指定长度的子列表。 如果子列表的长度小于指定的长度,则提取全部。请参阅下面的说明
在下面的例子中,我正在提取长度为2的子列表。如果length更大,我提取子列表中的前两个元素并忽略其余元素。 输入
A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]
输出
B = [['A',[1,2]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6]]]
我目前正在做如下工作,但是想知道是否有一种简单的方法
B=[]
for el in A:
l = []
if len(el[1]) > 2:
l.append(el[0])
l.append(el[1][0:2])
B.append(l)
else:
l.append(el[0])
l.append(el[1][0:2])
B.append(l)
print B
答案 0 :(得分:3)
你可以利用列表理解:
In [71]: A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]
In [72]: [[x[0],x[1][:2]] for x in A]
Out[72]: [['A', [1, 2]], ['D', [3, 4]], ['E', [6, 7]], ['F', [1]], ['G', [7, 6]]]
答案 1 :(得分:1)
您可以使用map
功能
>>> a=[[1,[1,2,3]],[2,[1]],[3,[1,2]]]
>>> map(lambda v: [v[0],v[1][:2]], a)
[[1, [1, 2]], [2, [1]], [3, [1, 2]]]
答案 2 :(得分:0)
对每个子列表项使用map
,因为'A'[:2]
仅返回'A'
。
In [115]: A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]
In [116]: [map(lambda x:x[:2],x) for x in A]
Out[116]: [['A', [1, 2]], ['D', [3, 4]], ['E', [6, 7]], ['F', [1]], ['G', [7, 6]]]
答案 3 :(得分:0)
如果您不想创建新列表,只需执行
>>> A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]
>>> for X in A:
X[1]=X[1][:2]
>>> A
[['A', [1, 2]], ['D', [3, 4]], ['E', [6, 7]], ['F', [1]], ['G', [7, 6]]]
答案 4 :(得分:0)
import collections
def doMagic(data):
if isinstance(data, collections.Iterable):
if all(type(elem) in [type(1), type('a')] for elem in data):
return data[:2]
else:
return [doMagic(elem) for elem in data][:2]
else:
return data
if __name__ == '__main__':
data = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]
print [doMagic(elem) for elem in data]