试图理解''.join()在列表理解中获取列表

时间:2019-04-09 02:17:00

标签: python list-comprehension

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)

3 个答案:

答案 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']