在python中迭代单个值和迭代的混合

时间:2016-01-27 23:02:06

标签: python

我在Python中编写for循环,我想迭代混合的单个对象和扁平的对象列表(或元组)。

例如:

a = 'one'
b = 'two'
c = [4, 5]
d = (10, 20, 30)

我想在for循环中迭代所有这些。我在想这样的语法会很优雅:

for obj in what_goes_here(a, b, *c, *d):
  # do something with obj

我在itertools查看了what_goes_here并且我没有看到任何内容,但我觉得我必须遗漏一些明显的东西!

我发现最接近的是连锁店,但我想知道是否存在任何可以保持我的例子不变的事情(仅替换what_goes_here)。

2 个答案:

答案 0 :(得分:1)

您可以执行此操作,但必须使用Python 3.5或更高版本来扩展解压缩语法。将所有参数放入容器(如tuple),然后将该容器发送到itertools.chain

>>> import itertools
>>> a = 'one'
>>> b = 'two'
>>> c = [4, 5]
>>> d = (10, 20, 30)
>>> list(itertools.chain((a, b, *c, *d)))
['one', 'two', 4, 5, 10, 20, 30]
>>> list(itertools.chain((a, *c, b, *d)))
['one', 4, 5, 'two', 10, 20, 30]
>>> list(itertools.chain((*a, *c, b, *d)))
['o', 'n', 'e', 4, 5, 'two', 10, 20, 30]

答案 1 :(得分:0)

import collections, itertools

a = 'one'
b = 'two'
c = [4, 5]
d = (10, 20, 30)
e = 12

l = [a, b, c, d, e]

newl = list(itertools.chain(*[x if isinstance(x, collections.Iterable) and not isinstance(x, str) else [x] for x in l]))