使用列表推导从元组中提取元素

时间:2014-10-11 01:36:05

标签: python list tuples list-comprehension

我有一个元组列表,我想将每个元组的第一个元素提取到另一个列表中。 我有一个名为' list'的元组列表。并尝试将元素提取到名为' list2'的列表中。而我得到的是:

>>> list = [ (1,2), (3,4), (5,6)]
>>> list2 = []
>>> list2 = []
>>> [list2[i] = list[i][0] for i in range(len(list))]
  File "<stdin>", line 1
    [list2[i] = list[i][0] for i in range(len(list))]
              ^
SyntaxError: invalid syntax

你们可以帮助弄清楚这种语法有什么问题吗?

4 个答案:

答案 0 :(得分:3)

使用lstlst2作为变量名称,其他人注意到list是一个糟糕的选择。

您不需要索引。使用索引通常被视为不良形式。

lst2 = [ pair[0] for pair in lst]

如果你真的,真的需要索引,某些数学或其他东西。

lst2 = [ lst[i][0] for (i, pair) in enumerate(lst)]

如果您需要操纵数字的二维矩阵,您可能想要了解numpy并查看numpy.matrixnumpy.array

答案 1 :(得分:0)

在列表理解中,只有表达式可以来。 list2[i] = list[i][0]是一项作业声明

并且,您不需要使用索引来访问项目。只需重复列表。

>>> lst = [ (1,2), (3,4), (5,6)]
>>> lst2 = [x[0] for x in lst]
>>> lst2
[1, 3, 5]
顺便说一句,不要使用list作为变量名。它影响内置类型/功能list

答案 2 :(得分:0)

您无法使用等号运算符设置变量,同时循环显示一行中的列表。你可以这样做:

list = [ (1,2), (3,4), (5,6)]
list2 = []
[list2.append(list[i]) for i in range(len(list))]

答案 3 :(得分:0)

另一种方法是使用zip()

>>> lst = [(1,2), (3,4), (5,6)]
>>> zip(*lst)
[(1, 3, 5), (2, 4, 6)]
>>> zip(*lst)[0]
(1, 3, 5)
>>> list(zip(*lst)[0])
[1, 3, 5]

但是,只需要一个列表就会有点浪费。