【问题标题】:Using a for loop to create a new list使用 for 循环创建新列表
【发布时间】:2020-06-01 16:49:26
【问题描述】:

我有一个字符串列表,想使用 for 循环来更改字符串并创建一个新列表。

oldList = ['AAA','BBB','CCC']

for i in range(len(oldList)):

    newList = []
    add1 = 'a_'
    add2 = '_z'

    newStr = add1 + oldList[i] + add2

    newList.append(newStr)

列表 'newList' 应包含旧列表中的所有字符串以及修改(即 ['a_AAA_z', 'a_BBB_z', 'a_CCC_z'])。但是,它只包含最后一个字符串(即 ['a_CCC_z'])。

我在这里想念什么?非常感谢。

【问题讨论】:

  • newList = []放到for循环外面
  • 将 newList 移到循环之外

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


【解决方案1】:

在循环外声明输出列表。顺便说一句,它可以简化:

newList = []
for ele in oldList:
    add1 = 'a_'
    add2 = '_z'
    newStr = add1 + ele + add2
    newList.append(newStr)

或者,如果我们使用列表解析和格式化字符串,我们可以进一步简化,正如@AnnZen 所建议的那样

newList = [f"a_{ele}_z" for ele in oldList]

【讨论】:

  • @AnnZen 是的!这是一个很好的建议,我会更新我的答案。谢谢!
【解决方案2】:

列表的声明应该在循环之外

oldList = ['AAA','BBB','CCC']
newList = []

for i in range(len(oldList)):
    # should not declare newList inside for loop
    #newList = []
    add1 = 'a_'
    add2 = '_z'

    newStr = add1 + oldList[i] + add2

    newList.append(newStr)
print(newList)

【讨论】:

    【解决方案3】:

    您可以使用格式化字符串和列表推导:

    oldList = ['AAA','BBB','CCC']
    newList = [f'a_{s}_z' for s in oldList]
    print(newList)
    

    输出:

    ['a_AAA_z', 'a_BBB_z', 'a_CCC_z']
    

    【讨论】:

      【解决方案4】:

      使用列表组合:

      oldList = ['AAA','BBB','CCC']
      newList = ['a_' + i + '_z' for i in oldList]
      

      【讨论】:

        【解决方案5】:

        您需要在 for 循环之外声明 newList。如果您在 for 循环中声明它,那么在 for 循环的每次迭代中,您都将变量 newList 重新分配为等于一个空列表,因此您会丢失先前迭代中的数据(留下仅来自上次迭代的数据。

        这是您的声明已修复的代码:

        oldList = ['AAA','BBB','CCC']
        newList = []
        
        for i in range(len(oldList)):
            add1 = 'a_'
            add2 = '_z'
        
            newStr = add1 + oldList[i] + add2
        
            newList.append(newStr)
        

        还有一个更简化的版本:

        oldList = ['AAA','BBB','CCC']
        newList = ['a_' + str + '_z' for str in oldList]
        

        【讨论】:

          【解决方案6】:

          您需要在 for 循环之外初始化 newList,否则它将在每次迭代时被初始化。 这段代码 sn-p 可能会有所帮助。

          oldList = ['AAA','BBB','CCC']
          newList = []
          
          for i in range(len(oldList)):
             add1 = 'a_'
             add2 = '_z'
          
             newStr = add1 + oldList[i] + add2
          
             newList.append(newStr)
          print(newList)
          

          【讨论】:

            猜你喜欢
            • 2017-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多