x = "some... random! text?!".split()
x = [''.join(char for char in string if char not in punctuation) for string
in x]
我试图通过在for循环中将其理解来理解此列表理解的工作方式,但是我无法重新创建它。这是我目前所拥有的,但似乎不正确。我在for循环中做错了什么?
for string in x:
for char in string:
if char not in punctuation:
''.join(char)
答案 0 :(得分:3)
您无法完全完美地复制join
的生成器参数。我会使用一个中间列表:
result = []
for string in x:
to_join = []
for char in string:
if char not in punctuation:
to_join.append(char)
result.append(''.join(to_join))
将punctuation
作为from string import punctuation; punctuation = set(punctuation)
,它输出
['some', 'random', 'text']
答案 1 :(得分:1)
列表理解本身可以直接转换为以下内容:
_result = []
for string in x:
_result.append(''.join(char for char in string if char not in punctuation))
x = _result
del _result
当然,没有中间变量_result
。您可以在列表推导中使用 generator表达式,它本身类似于列表推导,只是创建了一个生成器。因此,类似:
def _g():
for char in string:
if char not in punctuation:
yield char
将它们放在一起:
_result = []
for string in x:
def _g():
for char in string:
if char not in punctuation:
yield char
_result.append(''.join(_g()))
del _g
x = _result
del _result
但同样,实际上没有创建中间变量_result
和_g
。
答案 2 :(得分:0)
您必须使用append
创建一个列表并将值存储在其中:
l = []
for string in x:
s = ''
for char in string:
if char not in punctuation:
s += char
l.append(s)
现在:
print(l)
是:
['some', 'random', 'text']