【发布时间】:2021-01-11 18:31:30
【问题描述】:
我想在列表理解中将两个或多个不同的迭代器链接在一起。
假设我想将大写和小写字母组合成一个列表。我原来的方式是这样的,
lst1 = [chr(i) for i in range(97,123)]
lst2 = [chr(i) for i in range(65,91)]
lst = lst1+lst2
但是我认为必须有一些其他方法可以在一行中很好地做到这一点,然后我将它与 itertools 模块一起使用,
lst = [chr(i) for i in itertools.chain(range(97,123), range(65,91))]
最后我也想到了元组拆包,
lst = [chr(i) for i in (*range(97,123), *range(65,91))]
与其他两种方法相比,Itertools 速度较慢(元组解包是最快的一种)
例如,第一个范围和第二个范围内的字符组成列表
>>> lst1
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
>>> lst2
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
我希望它们仅与 1 个迭代器合并,而不是两个单独的迭代器。下面给出了合并列表的示例,其中使用了 2 个不同范围的值,
>>> lst
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
有什么办法可以改进或改变设计吗?
【问题讨论】:
-
您是否尝试过
itertools.chain两个生成器而不是范围?list(itertools.chain((chr(i) for i in range(97, 123)), (chr(i) for i in range(65, 91)))) -
您能否提供一个示例输出,以便我们准确了解您正在寻找什么解决方案?
标签: python list iterator list-comprehension