【问题标题】:How to fill a new list while iterating over another list?如何在迭代另一个列表时填充新列表?
【发布时间】:2020-03-30 10:01:28
【问题描述】:

代码

#Variables
var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']

list1 = []
for x in var1:
    splitted = x.split()
    a = [splitted[0] + ' ' + splitted[1]]
    list1.append(a)
    print(list1)

输出

[['Warehouse Pencil']]
[['Warehouse Pencil'], ['Production Pen']]

目标

我打算拆分列表,获取每个部分的第一个和第二个单词,并将它们放入一个新列表中。

问题

为什么我的输出给了我一个奇怪的输出?我哪里错了?

期望的输出

我想要的输出应该是这样的:

['Warehouse Pencil', 'Production Pen']

抓取第一个和第二个单词并将它们放入 1 个列表中。

【问题讨论】:

  • 去掉a = splitted[0] + ' ' + splitted[1]周围的括号

标签: python python-3.x string list for-loop


【解决方案1】:

这应该可以解决它 - 将 print 语句移出循环,并使 a 成为字符串而不是列表。

#Variables
var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']

list1 = []
for x in var1:
    splitted = x.split()
    a = splitted[0] + ' ' + splitted[1]
    list1.append(a)
print(list1)

输出:

['Warehouse Pencil', 'Production Pen']

您也可以使用列表推导:

>>> [' '.join(x.split()[:2]) for x in var1]
['Warehouse Pencil', 'Production Pen']

【讨论】:

  • 谢谢,我看到你删除了[] 并且还移动了打印的缩进。在这种情况下,缩进有什么影响?只是好奇
  • @LV98 缩进在这里很重要,否则每次for 循环运行时都会打印列表list1。将其移出该循环意味着它仅在循环结束后打印一次。
  • 感谢您的解释!还有列表理解发生了什么?
  • 列表推导基本上是一种压缩循环的方法,将列表填充到一行中。你可以阅读更多关于他们的信息here
【解决方案2】:

您也可以使用方法str.rfind(sub)。它返回字符串中找到子字符串sub(在您的情况下为空格)的最高索引:

[i[:i.rfind(' ')] for i in var1]
# ['Warehouse Pencil', 'Production Pen']

或者,您可以使用方法str.rsplit()。它从右边开始拆分字符串:

[i.rsplit(maxsplit=1)[0] for i in var1]
# ['Warehouse Pencil', 'Production Pen']

【讨论】:

    【解决方案3】:

    获取文件名。 我们可以使用以下方法。

    import pathlib
    
    var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']
    file_name = []
    
    for i in var1:
        p = pathlib.Path(i)
        file_name.append(p.stem)
        
    print(file_name)
    
    ['Warehouse Pencil 1', 'Production Pen 20']
    
    [Program finished]
    

    【讨论】:

      【解决方案4】:

      list.extend()

      由于其他答案中未提及此关键字,因此您可以扩展列表而不是附加它。

      var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']
      
      list1 = []
      for x in var1:
          splitted = x.split()
          a = [splitted[0] + ' ' + splitted[1]]
          list1.extend(a)  # Notice the difference here! 
      print(list1)
      

      【讨论】:

        猜你喜欢
        • 2021-10-22
        • 2017-05-07
        • 2017-03-02
        • 1970-01-01
        • 2021-08-09
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        相关资源
        最近更新 更多