我在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
)。
答案 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]))