列表理解与某种循环相互依赖?

2024-10-02 20:31:58 发布

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

我确信已经有很多关于列表理解的问题被问到了,但是我有一个关于一个非常特殊的案例,涉及嵌套循环和共引用,我在别处找不到答案。你知道吗

假设您有一个满足两个约束条件的字典:(1)字典中的每个值都是一个任意长度的列表;(2)字典外存在一个列表,其元素是字典中键的子集(这是出于超出此问题范围的原因所必需的)。你知道吗

明白了吗?看起来有点像这样:

someDict = {'a':[0, 1], 'b':[2, 3], 'c':[4, 5], 'd':[6, 7], 'e':[8, 9]}
supraList = ['b', 'c', 'd']

现在我想做的是:

1)只循环那些someDict的列表,它们的键也是supraList的元素

2)将那些someDict列表的元素添加到一些新的超列表中(而不是列表本身)。你知道吗

效果是这样的:

... CODE ...
newSupraList = [2, 3, 4, 5, 6, 7]

例如,supraList包含“b”、“c”和“d”,因此newSupraList获得someDict中与“b”、“c”和“d”相关联的列表的组合元素。你知道吗

通过循环实现这一点有点像:

newSupraList = []
for i in supraList:
    for j in someDict[i]:
        newSupraList.append(j)

这可以通过理解来实现吗?我能写的最好的理解(而且很难看)是:

newSupraList = [[2, 3], [4, 5], [6, 7]]

我确信有一个非常简单的方法来迭代一个列表,尽管上面提到了所有的问题,但是我想我应该从一些新的角度来尝试这个问题。循环可能更好的可读性,但我认为这是有趣的,在任何情况下!你知道吗


Tags: 答案in元素列表for字典原因子集
2条回答

是的,先生:

newSupraList = [item for key in supraList for item in someDict[key]]

当然,在理解中也可以有两个for循环。你知道吗

>>> [x for y in supraList for x in someDict[y]]
[2, 3, 4, 5, 6, 7]

或者,您可以使用来自itertoolschain。你知道吗

拆包时:

>>> from itertools import chain
>>> list(chain(*(someDict[x] for x in supraList)))
[2, 3, 4, 5, 6, 7]

使用chain.from_iterable

>>> list(chain.from_iterable(someDict[x] for x in supraList))
[2, 3, 4, 5, 6, 7]

相关问题 更多 >