代码之家  ›  专栏  ›  技术社区  ›  Gen Tan

正在尝试理解“”。join()在列表理解中获取列表

  •  1
  • Gen Tan  · 技术社区  · 7 年前
    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 回复  |  直到 7 年前
        1
  •  3
  •   iz_    7 年前

    你不能完全复制 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']
    
        2
  •  1
  •   juanpa.arrivillaga    7 年前

    清单本身可以直接翻译为:

    _result = []
    for string in x:
        _result.append(''.join(char for char in string if char not in punctuation))
    x = _result
    del _result
    

    _result . 你用一个 生成器表达式 在列表理解中,它本身就像一个列表理解,只是它创建了一个生成器。比如说:

    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
    

    但是,没有中间变量 _结果 和 _g

        3
  •  0
  •   U13-Forward    7 年前

    你必须建立一个列表,并使用 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']