Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以列表/听写理解方式组合列表_Python_List Comprehension - Fatal编程技术网

Python 以列表/听写理解方式组合列表

Python 以列表/听写理解方式组合列表,python,list-comprehension,Python,List Comprehension,是否可以将列表/词典理解应用于以下代码,使其具有[“abc”、“ab”、“cd”] 我能想到 ll=[tk[i]表示t中的i],那么这就变成了。所以 但这不是一条班轮。我不知道是否有更好的办法 如果所需列表中的值顺序很重要,那么实现这一点的一般方法是根据键对dict中的项进行排序,并合并值列表。例如: >>> from operator import itemgetter >>> from itertools import chain >>>

是否可以将列表/词典理解应用于以下代码,使其具有
[“abc”、“ab”、“cd”]

我能想到
ll=[tk[i]表示t中的i]
,那么这就变成了。所以


但这不是一条班轮。我不知道是否有更好的办法

如果所需列表中的值顺序很重要,那么实现这一点的一般方法是根据键对
dict
中的项进行排序,并合并值列表。例如:

>>> from operator import itemgetter
>>> from itertools import chain

>>> list(chain.from_iterable(i for _, i in sorted(tk.items(), key=itemgetter(0))))
['abc', 'ab', 'cd']

如果所需列表中的值顺序很重要,那么实现这一点的一般方法是根据键对
dict
中的项进行排序,并合并值列表。例如:

>>> from operator import itemgetter
>>> from itertools import chain

>>> list(chain.from_iterable(i for _, i in sorted(tk.items(), key=itemgetter(0))))
['abc', 'ab', 'cd']

只需遍历字典中的值。大概是这样的:

>>> tk = {}
>>> tk[1] = ['abc']
>>> tk[2] = ['ab', 'cd']
>>> combined = [x for t in tk.values() for x in t]
>>> print combined
['abc', 'ab', 'cd']
如果需要维护列表的顺序,您甚至可以使用,因为常规的
dict
不能保证其键的顺序:

>>> import collections
>>> tk = collections.OrderedDict()
>>> tk[1] = ['abc']
>>> tk[2] = ['ab', 'cd']
>>> combined = [x for t in tk.values() for x in t]
>>> print combined
['abc', 'ab', 'cd']
请注意,
[tk[i]对于(1,2)]
中的i,正如您所建议的那样,不会得到期望的结果。您仍然需要遍历每个列表中的值

>>> [tk[i] for i in (1, 2)]
[['abc'], ['ab', 'cd']]

还要注意,正如您稍后提出的那样,
[tk[i]for i in tk]
,与
tk.values()
完全相同。因此,您可以使用建议的解决方案
[t中的x.values()代表t中的x]
与您所取得的效果相当,只是在一行中。

只需遍历字典中的值即可。大概是这样的:

>>> tk = {}
>>> tk[1] = ['abc']
>>> tk[2] = ['ab', 'cd']
>>> combined = [x for t in tk.values() for x in t]
>>> print combined
['abc', 'ab', 'cd']
如果需要维护列表的顺序,您甚至可以使用,因为常规的
dict
不能保证其键的顺序:

>>> import collections
>>> tk = collections.OrderedDict()
>>> tk[1] = ['abc']
>>> tk[2] = ['ab', 'cd']
>>> combined = [x for t in tk.values() for x in t]
>>> print combined
['abc', 'ab', 'cd']
请注意,
[tk[i]对于(1,2)]
中的i,正如您所建议的那样,不会得到期望的结果。您仍然需要遍历每个列表中的值

>>> [tk[i] for i in (1, 2)]
[['abc'], ['ab', 'cd']]

还要注意,正如您稍后提出的那样,
[tk[i]for i in tk]
,与
tk.values()
完全相同。因此,您可以使用建议的解决方案
[t中的x代表t.values()代表t中的x]
与您在一行中实现的功能相当。

考虑到您手动选择一系列键的限制:

>>> tk = {}
>>> tk[1] = ["abc"]
>>> tk[2] = ["ab", "cd"]
>>> tk[3] = ["ef", "gh"]
你想要:

>>> [vals for i in (1,2) for vals in tk[i]]
['abc', 'ab', 'cd']

考虑到手动选择一系列关键点的限制:

>>> tk = {}
>>> tk[1] = ["abc"]
>>> tk[2] = ["ab", "cd"]
>>> tk[3] = ["ef", "gh"]
你想要:

>>> [vals for i in (1,2) for vals in tk[i]]
['abc', 'ab', 'cd']

当你只需要执行以下操作时,为什么你需要列表理解:
tk[1]+tk[2]
?你应该使用
extend
而不是
append
,你可能会从
itertools.chain
中受益。请注意支架这只是一个说明性的例子。我有一个很长的迭代序列。这通常被称为列表展平@Meccano不使用有副作用的列表理解。无论如何,你可以简单地为tk中的v执行
[s.values()为v中的s]
(顺序不保证)。当你可以执行时,为什么需要列表理解:
tk[1]+tk[2]
?你应该使用
extend
而不是
append
,你可能会从
itertools.chain
中受益。请注意支架这只是一个说明性的例子。我有一个很长的迭代序列。这通常被称为列表展平@Meccano不使用有副作用的列表理解。无论如何,你可以简单地做
[s for v in tk.values()for s in v]
(顺序不保证)。你应该更喜欢
链。from_iterable
而不是splatting:@juanpa.arrivillaga感谢你指出这一点。我本来应该用链的。从一开始就可以。我以前更喜欢splatting版本的外观,直到我想到它并意识到它必须将iterable转换成一个元组并从那里处理它!你应该更喜欢链。从_iterable而不是炫耀:@juanpa.arrivillaga谢谢你指出这一点。我本来应该用链的。从一开始就可以。我以前更喜欢splatting版本的外观,直到我想到它并意识到它必须将iterable转换成一个元组并从那里处理它!