【问题标题】:Using .strip() for 2D list将 .strip() 用于 2D 列表
【发布时间】:2016-11-19 04:13:19
【问题描述】:

第一个问题

我想知道如何在 2D 列表中使用 .strip() 函数,以便在列表中每个列表的每个元素中,您可以删除字符串中的无用空格。

这是我在 shell 中的尝试:

>>> questions = [['1986 ',' Baby', 'Shaw ', ' Welcome'],['1976',' fJKC','cbv bv ',' byt']]
>>> [['1986 ',' Baby', 'Shaw ', ' Welcome'],['1976',' fJKC','cbv bv ',' byt']]

>>> for z in range(len(questions)):
        for t in range(len(questions[z])):
                questions[z].append(questions[z][t].strip())
>>> questions
>>> [['1986 ', ' Baby', 'Shaw ', ' Welcome', '1986', 'Baby', 'Shaw', 'Welcome'], ['1976', ' fJKC', 'cbv bv ', ' byt', '1976', 'fJKC', 'cbv bv', 'byt']]

但是,这不是我希望它返回的方式。我的预期结果是,写完代码后,问题等于这样:

>>> questions
>>> [['1986', 'Baby', 'Shaw', 'Welcome'], ['1976', 'fJKC', 'cbv bv', 'byt']]

【问题讨论】:

    标签: python list python-3.x matrix


    【解决方案1】:
    1. 您不需要使用索引来迭代列表。只需迭代。
    2. list.append 不会原地更改项目;使用list[i] = ... 更改项目。或list[:] = ... 更改所有项目。

    这是使用简单迭代和列表切片分配 (list[:] = ...) 用列表理解就地替换项目的方法:

    questions = [['1986 ',' Baby', 'Shaw ', ' Welcome'], ['1976',' fJKC','cbv bv ',' byt']]
    
    for q in questions:
        q[:] = [info.strip() for info in q]
    
        # Alternatives
        # q[:] = (info.strip() for info in q)  # generator expression
        # q[:] = map(str.strip, q)  # `map` with unbound method `str.strip`
    
    # question => [['1986', 'Baby', 'Shaw', 'Welcome'], ['1976', 'fJKC', 'cbv bv', 'byt']]
    

    【讨论】:

      【解决方案2】:

      您可以在嵌套的单行循环中轻松地strip() 您的字符串。

      questions = [[r.strip() for r in q] for q in questions] 
      

      【讨论】:

        猜你喜欢
        • 2021-07-14
        • 2015-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多