如何通过一个循环依次遍历多个列表?[重复]


问题内容

这个问题已经在这里有了答案

一个接一个地遍历两个列表 (3个答案)

3年前关闭。

Python 3.6.3中, 有没有一种方法可以循环遍历一个列表?

例如:

deck = [(value, suit) for value in range(2, 11) +
            ["J", "Q", "K", "A"] for suit in ["H", "C", "D", "S"]]

(在这种情况下,我想在非面部卡之后循环遍历面部卡。)

为了澄清:上面的行抛出:

TypeError: unsupported operand type(s) for +: 'range' and 'list'

这是我的问题。


问题答案:

rangelist在Python3中不返回a ,因此range(2, 10) + ["J", "Q", "K", "A"]不起作用,但是list(range(2, 10)) + ["J", "Q", "K", "A"]可以。您还可以itertools.chain用来串联可迭代对象:

from itertools import chain

chain(range(2, 10), ["J", "Q", "K", "A"])
# or even shorter:
chain(range(2, 10), "JQKA")  # as strings themselves are iterables

# so this comprehension will work
deck = [
   (value, suit) 
   for value in chain(range(2, 10), "JQKA") 
   for suit in "HCDS"
]

嵌套的理解当然会构成笛卡尔积,您也可以将util用于以下方面:

from itertools import product
deck = list(product(chain(range(2, 10), "JQKA"), "HCDS"))