要在中列出的元组的Python列表

2024-04-24 15:19:00 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有x=[(12,), (1,), (3,)](元组列表)并且我想要x=[12, 1, 3](整数列表)以最好的方式?你能帮忙吗?


Tags: 列表方式整数元组
3条回答

就这样做:

x = [i[0] for i in x]

说明:

>>> x=[(12,), (1,), (3,)]

>>> x
[(12,), (1,), (3,)]

>>> [i for i in x]
[(12,), (1,), (3,)]

>>> [i[0] for i in x]
[12, 1, 3]

你没有说“最好”是什么意思,但你大概是说“最Python”或“最可读”之类的。

F3AR3DLEGEND给出的列表理解可能是最简单的。任何知道如何阅读清单理解的人都会立即知道它的含义。

y = [i[0] for i in x]

然而,通常你并不真正需要一个列表,只需要一个可以重复一次的列表。如果在x中有十亿个元素,那么构建十亿个元素y来一次迭代一个元素可能是个坏主意。因此,可以使用生成器表达式:

y = (i[0] for i in x)

如果您喜欢函数式编程,您可能更喜欢使用mapmap的缺点是必须传递函数,而不仅仅是表达式,这意味着您要么需要使用lambda函数,要么需要使用itemgetter

y = map(operator.itemgetter(0), x)

在Python 3中,这相当于生成器表达式;如果需要list,请将其传递给list。在Python 2中,它返回一个list;如果需要迭代器,请使用itertools.imap,而不是map

如果你想要一个更通用的扁平化解决方案,你可以自己写一个,但是这类通用解决方案的^{}总是值得一看的,事实上有一个名为flatten的配方用于“扁平化一级嵌套”。所以,复制并粘贴到代码中(或者pip install more-itertools),您就可以这样做:

y = flatten(x)

如果你看看flatten是如何实现的,然后看看chain.from_iterable是如何实现的,然后看看chain是如何实现的,你会注意到你可以用内置词来编写相同的东西。但是,当flatten变得更加可读和明显时,为什么还要费心呢?

最后,如果要将泛型版本简化为嵌套列表理解(当然,也可以是生成器表达式):

y = [j for i in x for j in i]

然而,无论是在写作还是阅读中,嵌套式列表理解都很容易出错。(请注意,F3AR3DLEGEND,也就是最先给出最简单答案的人,也给出了嵌套式的理解,但却错了。如果他不能成功,你确定你想试试吗?)对于非常简单的情况,它们并不太糟糕,但我仍然认为flatten更容易阅读。

y = [i[0] for i in x]

不过,这只适用于每个元组一个元素。

但是,如果每个元组有多个元素,则可以使用稍微复杂一点的列表理解:

y = [i[j] for i in x for j in range(len(i))]

引用:List Comprehensions

相关问题 更多 >