Python 如何将两个循环放入列表中?

Python 如何将两个循环放入列表中?,python,list,for-loop,list-comprehension,Python,List,For Loop,List Comprehension,我正在寻找一个答案,如何将两个for循环放入列表,其中一个for循环嵌入到第二个for循环中。在本例中是否可以避免使用for循环?本例的目标应该是从列表中嵌入到另一个列表中的列表中提取值到一个列表中 slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]} li = list(slov.keys()) hod = [i for i in li if len(i)==3] slo = [] for k in hod: j = slov[k]

我正在寻找一个答案,如何将两个for循环放入列表,其中一个for循环嵌入到第二个for循环中。在本例中是否可以避免使用for循环?本例的目标应该是从列表中嵌入到另一个列表中的列表中提取值到一个列表中

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
li = list(slov.keys())
hod = [i for i in li if len(i)==3]
slo = []

for k in hod:
    j = slov[k]
    for l in j:
        slo.append(l)

提前感谢您。

使用for循环可以使代码更具可读性和直截了当性,但是如果您坚持使用单行程序列表,那么它就是:

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
slo = [l for k in (i for i in slov.keys() if len(i)==3) for l in slov[k]]

print(slo)
输出:

[1.0, 2.0, 6.0]

使用for循环可以使代码更具可读性和直截了当,但是如果您坚持使用一行程序列表,那么它就是:

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
slo = [l for k in (i for i in slov.keys() if len(i)==3) for l in slov[k]]

print(slo)
输出:

[1.0, 2.0, 6.0]

您可以使用
itertools.chain
展平长度为3的键的值列表:

from itertools import chain

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}

slo = list(chain.from_iterable(slov[k] for k in slov if len(k) == 3))

print(slo)
# [1.0, 2.0, 6.0]

您可以使用
itertools.chain
展平长度为3的键的值列表:

from itertools import chain

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}

slo = list(chain.from_iterable(slov[k] for k in slov if len(k) == 3))

print(slo)
# [1.0, 2.0, 6.0]

我可以看到上面已经给出了一些答案。在下面,您将看到同一版本的稍加修改。

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
print ([j for k, i in slov.items() if len(k) == 3 for j in i]) # Outer Loop (for k, i in slov.items() if len(k) == 3), Inner Loop (for j in i)

# Output - [1.0, 2.0, 6.0]

我希望这很重要……:)

我可以看到上面已经给出了一些答案。在下面,您将看到同一版本的稍加修改。

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
print ([j for k, i in slov.items() if len(k) == 3 for j in i]) # Outer Loop (for k, i in slov.items() if len(k) == 3), Inner Loop (for j in i)

# Output - [1.0, 2.0, 6.0]

我希望这很重要……:)

另外两个嵌套选项。

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
print ([j for k, i in slov.items() if len(k) == 3 for j in i]) # Outer Loop (for k, i in slov.items() if len(k) == 3), Inner Loop (for j in i)

# Output - [1.0, 2.0, 6.0]
首先,使用与条件匹配的键构建新dict:

[ item for values in { k: v for k, v in slov.items() if len(k) == 3 }.values() for item in values ]
[ item for values in [ v for k, v in slov.items() if len(k) == 3 ] for item in values ]

或者使用其键与条件匹配的值构建列表:

[ item for values in { k: v for k, v in slov.items() if len(k) == 3 }.values() for item in values ]
[ item for values in [ v for k, v in slov.items() if len(k) == 3 ] for item in values ]
如果len(k)==3,则此部分
[k的v,斯洛伐克语items中的v()
将结果作为嵌套列表返回
[[1.0,2.0],[6.0]]
,因此需要在列表中展平嵌套



两个都返回
#=>[1.0,2.0,6.0]
另一对嵌套选项。

slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
print ([j for k, i in slov.items() if len(k) == 3 for j in i]) # Outer Loop (for k, i in slov.items() if len(k) == 3), Inner Loop (for j in i)

# Output - [1.0, 2.0, 6.0]
首先,使用与条件匹配的键构建新dict:

[ item for values in { k: v for k, v in slov.items() if len(k) == 3 }.values() for item in values ]
[ item for values in [ v for k, v in slov.items() if len(k) == 3 ] for item in values ]

或者使用其键与条件匹配的值构建列表:

[ item for values in { k: v for k, v in slov.items() if len(k) == 3 }.values() for item in values ]
[ item for values in [ v for k, v in slov.items() if len(k) == 3 ] for item in values ]
如果len(k)==3,则此部分
[k的v,斯洛伐克语items中的v()
将结果作为嵌套列表返回
[[1.0,2.0],[6.0]]
,因此需要在列表中展平嵌套



返回的
#=>[1.0,2.0,6.0]

始终表示语言/运行时,J.Krc…始终表示语言/运行时,J.Krc。。。