从列表中挑选项目



我有以下形式的列表:

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]]

因此,人们不使用扁平化。

您可以在理解中添加额外的环路:

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]

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

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]

您可以在列表上迭代并将其附加到新列表中。

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)

您首先必须将列表弄平 flat_list = [item for sublist in l0 for item in sublist]然后做你的事情 l=[x[1] for x in flat_list]

尝试使用索引,您的l0是一个列表:https://www.tutorialspoint.com/python/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(

最新更新