【发布时间】:2013-10-19 12:46:08
【问题描述】:
我想一次将两个项目添加到列表理解中。一项是不变的。如何在列表理解中仅使用一个 for 循环而不使用其他功能来实现这一点。不使用任何导入的答案将受到青睐。
看看以下内容:
>>> mystring = 'ABCELKJSDLHFWEHSJDHFKHIUEHFSDF'
>>> sum([['^', char] for char in mystring.lower()], [])
['^', 'a', '^', 'b', '^', 'c', '^', 'e', '^', 'l', '^', 'k', '^', 'j', '^', 's', '^', 'd', '^', 'l', '^', 'h', '^', 'f', '^', 'w', '^', 'e', '^', 'h', '^', 's', '^', 'j', '^', 'd', '^', 'h', '^', 'f', '^', 'k', '^', 'h', '^', 'i', '^', 'u', '^', 'e', '^', 'h', '^', 'f', '^', 's', '^', 'd', '^', 'f']
我正在尝试在每个小写字母之前添加^ 字符的列表。在此示例中,您需要使用sum 来展平列表。但是,我的问题是,是否可以首先制作一个平面列表。上面的输出就是想要的输出。
就像在一个变量之前不断地附加一些东西,这个变量随着for循环的每次迭代而改变。不能在这里使用两个for 循环,因为那太简单了,例如:
mystring = 'ABCELKJSDLHFWEHSJDHFKHIUEHFSDF'
print [item for x in mystring.lower() for item in ['^', x]]
如果有人这样做:
>>> mystring = 'ABCELKJSDLHFWEHSJDHFKHIUEHFSDF'
>>> [['^', x] for x in mystring]
['^', 'a', '^', 'b', '^', 'c', '^', 'e', '^', 'l', '^', 'k', '^', 'j', '^', 's', '^', 'd', '^', 'l', '^', 'h', '^', 'f', '^', 'w', '^', 'e', '^', 'h', '^', 's', '^', 'j', '^', 'd', '^', 'h', '^', 'f', '^', 'k', '^', 'h', '^', 'i', '^', 'u', '^', 'e', '^', 'h', '^', 'f', '^', 's', '^', 'd', '^', 'f']
您在列表中获得列表。因此,有没有一种方法可以在列表推导中一次附加两个项目,而不必使用附加 for 循环或像 sum 这样的附加函数?我问这个,因为它很简单,但我找不到办法。如果有人尝试执行以下操作:
>>> ['^', x for x in mystring.lower()]
File "<console>", line 1
['^', x for x in mystring.lower()]
^
SyntaxError: invalid syntax
尝试给出SyntaxError。那么,我所要求的在 Python 中是不可能做到的吗?使用 () 给了我一个元组列表。
我也尝试过使用splat/unpacking 运算符:
>>> [*['^', x] for x in mystring.lower()]
File "<console>", line 1
[*['^', x] for x in mystring.lower()]
^
SyntaxError: invalid syntax
但是如上所述,这也是一个语法错误。很抱歉编辑晚了,但我尝试了以下方法:
import itertools
mystring = "HELLOWORLD"
print(list(itertools.chain.from_iterable(('^', x) for x in mystring.lower())))
但以上内容仍然需要导入。
【问题讨论】:
-
您的预期输出是什么?你想
^作为单独的列表元素,在每个字符之前,还是只是附加到字符。 -
在第一个代码示例下,给出了输出。我认为它相当清楚。