gpt4 book ai didi

Python 元组列表到 int 列表

转载 作者:太空狗 更新时间:2023-10-29 19:35:26 24 4
gpt4 key购买 nike

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

最佳答案

你没有说“最好”是什么意思,但大概你的意思是“最pythonic”或“最可读”或类似的东西。

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

如果你想要一个更通用的扁平化解决方案,你可以自己写一个,但它总是值得一看 itertools对于此类通用解决方案,实际上有一个名为 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 更容易阅读。

关于Python 元组列表到 int 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com