2024-04-24 15:19:00 发布
网友
所以,我有x=[(12,), (1,), (3,)](元组列表)并且我想要x=[12, 1, 3](整数列表)以最好的方式?你能帮忙吗?
x=[(12,), (1,), (3,)]
x=[12, 1, 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来一次迭代一个元素可能是个坏主意。因此,可以使用生成器表达式:
x
y
y = (i[0] for i in x)
如果您喜欢函数式编程,您可能更喜欢使用map。map的缺点是必须传递函数,而不仅仅是表达式,这意味着您要么需要使用lambda函数,要么需要使用itemgetter:
map
lambda
itemgetter
y = map(operator.itemgetter(0), x)
在Python 3中,这相当于生成器表达式;如果需要list,请将其传递给list。在Python 2中,它返回一个list;如果需要迭代器,请使用itertools.imap,而不是map。
list
itertools.imap
如果你想要一个更通用的扁平化解决方案,你可以自己写一个,但是这类通用解决方案的^{}总是值得一看的,事实上有一个名为flatten的配方用于“扁平化一级嵌套”。所以,复制并粘贴到代码中(或者pip install more-itertools),您就可以这样做:
flatten
pip install more-itertools
y = flatten(x)
如果你看看flatten是如何实现的,然后看看chain.from_iterable是如何实现的,然后看看chain是如何实现的,你会注意到你可以用内置词来编写相同的东西。但是,当flatten变得更加可读和明显时,为什么还要费心呢?
chain.from_iterable
chain
最后,如果要将泛型版本简化为嵌套列表理解(当然,也可以是生成器表达式):
y = [j for i in x for j in i]
然而,无论是在写作还是阅读中,嵌套式列表理解都很容易出错。(请注意,F3AR3DLEGEND,也就是最先给出最简单答案的人,也给出了嵌套式的理解,但却错了。如果他不能成功,你确定你想试试吗?)对于非常简单的情况,它们并不太糟糕,但我仍然认为flatten更容易阅读。
不过,这只适用于每个元组一个元素。
但是,如果每个元组有多个元素,则可以使用稍微复杂一点的列表理解:
y = [i[j] for i in x for j in range(len(i))]
引用:List Comprehensions
就这样做:
说明:
你没有说“最好”是什么意思,但你大概是说“最Python”或“最可读”之类的。
F3AR3DLEGEND给出的列表理解可能是最简单的。任何知道如何阅读清单理解的人都会立即知道它的含义。
然而,通常你并不真正需要一个列表,只需要一个可以重复一次的列表。如果在
x
中有十亿个元素,那么构建十亿个元素y
来一次迭代一个元素可能是个坏主意。因此,可以使用生成器表达式:如果您喜欢函数式编程,您可能更喜欢使用
map
。map
的缺点是必须传递函数,而不仅仅是表达式,这意味着您要么需要使用lambda
函数,要么需要使用itemgetter
:在Python 3中,这相当于生成器表达式;如果需要
list
,请将其传递给list
。在Python 2中,它返回一个list
;如果需要迭代器,请使用itertools.imap
,而不是map
。如果你想要一个更通用的扁平化解决方案,你可以自己写一个,但是这类通用解决方案的^{} 总是值得一看的,事实上有一个名为
flatten
的配方用于“扁平化一级嵌套”。所以,复制并粘贴到代码中(或者pip install more-itertools
),您就可以这样做:如果你看看
flatten
是如何实现的,然后看看chain.from_iterable
是如何实现的,然后看看chain
是如何实现的,你会注意到你可以用内置词来编写相同的东西。但是,当flatten
变得更加可读和明显时,为什么还要费心呢?最后,如果要将泛型版本简化为嵌套列表理解(当然,也可以是生成器表达式):
然而,无论是在写作还是阅读中,嵌套式列表理解都很容易出错。(请注意,F3AR3DLEGEND,也就是最先给出最简单答案的人,也给出了嵌套式的理解,但却错了。如果他不能成功,你确定你想试试吗?)对于非常简单的情况,它们并不太糟糕,但我仍然认为
flatten
更容易阅读。不过,这只适用于每个元组一个元素。
但是,如果每个元组有多个元素,则可以使用稍微复杂一点的列表理解:
引用:List Comprehensions
相关问题 更多 >
编程相关推荐