从列表列表中挑选项目

时间:2018-04-25 15:34:25

标签: python list

我有以下表格的清单:

l0=[[('x0', 2), ('x1', 3)], [('x2', 5), ('x3', 7), ('x4', 1)]]

如何将其转变为:

l=[2,3,5,7,1]

我试过了:

l=[x[1] for x in l0]

给出:

#[('x1', 3), ('x3', 7)]

修改 为了不丢失元素的跟踪,无论如何还要输出为:

l=[[2,3],[5,7,1]]

所以不要使用扁平化。

5 个答案:

答案 0 :(得分:2)

您可以为您的理解添加额外的循环:

l0=[[('x0', 2), ('x1', 3)], [('x2', 5), ('x3', 7), ('x4', 1)]]

l=[x[1] for i in l0 for x in i]
print(l)
# [2, 3, 5, 7, 1]

答案 1 :(得分:1)

对于您的新问题,您可以使用嵌套理解。

lst0 = [[('x0', 2), ('x1', 3)], [('x2', 5), ('x3', 7), ('x4', 1)]]
lst = [[t[1] for t in u] for u in lst0]
print(lst)

<强>输出

[[2, 3], [5, 7, 1]]

我更改了列表的名称,因为l0l在大多数字体中都不太可读:l1太相似。

作为替代方案,你可以使用map来做到这一点,尽管Guido并不喜欢这种结构:

from operator import itemgetter

lst0 = [[('x0', 2), ('x1', 3)], [('x2', 5), ('x3', 7), ('x4', 1)]]
print([list(map(itemgetter(1), u)) for u in lst0])

在Python 2中,您可以省略list包装器:

print [map(itemgetter(1), u) for u in lst0]

答案 2 :(得分:0)

您可以遍历列表并将其附加到新列表中。

l0=[[('x0', 2), ('x1', 3)], [('x2', 5), ('x3', 7), ('x4', 1)]]

out = []
for a in l0:
    out.append([x[0] for x in a])
print(out)

答案 3 :(得分:-1)

你首先必须像这样压扁列表 flat_list = [item for sublist in l0 for item in sublist] 然后做你的事 l=[x[1] for x in flat_list]

答案 4 :(得分:-2)

尝试使用索引,你的l0是一个列表:https://www.tutorialspoint.com/python/python_lists.htm

l0=[[('x0', 2), ('x1', 3)], [('x2', 5), ('x3', 7), ('x4', 1)]]
l=(l0[0][0][1],l0[0][1][1],l0[1][0][1],l0[1][1][1],l0[1][2][1])
print(l)
  
    
      

(2,3,5,7,1)