我想一次将两个项目添加到列表理解中。一项是不变的。如何在列表理解中仅使用一个 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())))
但是以上仍然需要导入。