【问题标题】:how to append a list in python with for loop如何使用for循环在python中附加一个列表
【发布时间】:2019-04-05 11:48:52
【问题描述】:

我想追加 my_list

list2 = ['1','2','3','4','5']

my_list = []
for i in list2:
    my_list.append(i)

print(my_list)

这会将list2 放入my_list。

结果是

['1', '2', '3', '4', '5']

但我只想要值“2”和“5”)

所以是这样的:

[ '2', '5']

试过了

for i in list2:
    my_list.append(i[1:4])

有什么想法吗?

【问题讨论】:

    标签: python for-loop append


    【解决方案1】:

    只需将一个条件与list comprehension结合使用:

    my_list = [item for item in list2 if item == '2' or item == '5']
    

    【讨论】:

    • 这对我没有帮助,因为我想学习如何使用索引追加。所以可以说追加 i[2], i [5])
    • @drikdrik 请澄清你的问题。您在那里没有提到任何关于索引的内容,而是明确提到了您想要保留的值。它总是索引 2 和 5(实际上,它是您列表中的索引 1 和 4)吗?还有什么我们需要知道的吗?
    • [item for item in list2 if item in {'2', '5'}] 在这里也很好看。
    • @DrikDrik,如果您想使用index,那么只需使用enumerate:my_list = [item for (index, item) in enumerate(list2) if list2[index] == '2' or list2[index] == '5']
    【解决方案2】:

    最简单、最快的方法是对您在循环中搜索的特定值使用条件语句。

    if i == 2 or i == 5:
       new_list.append(i)
    

    这种方法的缺点是,如果您需要扩展要检索的值的范围,则需要编写最长的条件 if i == 1 or i == 5 ... or i == N: ,这不仅不好看,而且是不好的编程习惯,因为代码很难维护。

    更好的方法是创建一个包含您要检索的值的列表,并在将其添加到新列表之前检查实际元素是否是此列表。

    list2 = ['1','2','3','4','5']
    
    wanted = ['2','5'] #what I search
    my_list = []
    for value in list2:
      if value in wanted: #when value is what a I want, append it
        my_list.append(value)
    

    但是,如果您想按位置添加元素,而不是查找特定值的每次出现,您可以使用整数列表并在其上循环以添加所需的元素。

    positions = [1,4] #indicates the positions from which I want to retrieve elements
    new_list = [list[p] for p in positions] #using list comprehension for brevity
    

    注意

    我要补充的最后一件事是在 python 中你不能执行

    my_list.append(i[0,4]) 
    

    因为 python 在查看 [0,4] 时会像您传递一个元组一样解释它(因为逗号)并且会出现以下错误TypeError: list indices must be integers or slices, not tuple。

    【讨论】:

      【解决方案3】:

      这取决于如何决定应将 list2 的哪些元素添加到 my_list,您没有提到:
      现在你可以按照@MihaiAlexandru-Ionut 的建议去做。
      或:

      list2 = ['1','2','3','4','5']
      
      my_list = []
      my_list.append(list2[1])
      my_list.append(list2[4])
      
      print(my_list)
      
      # or
      
      my_list = []
      my_list = [list2[1], list2[4], ]
      print(my_list)
      

      【讨论】:

        【解决方案4】:

        这里有一个简短的方法。但请注意,如果列表中有重复元素,它会中断。

        list2 = ['1','2','3','4','5']
        
        my_list = []
        
        want = ['2', '5']
        
        my_list = [list2[list2.index(i)] for i in list2 for item in want if i == item] # will fail if elements are not unique.
        

        最后一行相当于这个

        my_list = [item for i in list2 for item in want if i == item] # much better than using index method.
        

        这是展开后的表格。

        list2 = ['1','2','3','4','5']
        my_list = []
        want = ['2', '5']
        for i in list2:
            for item in want:
                if i == item:
                    my_list.append(list2[list2.index(i)])
                    #my_list.append(item)
        
        
        print(my_list)
        

        【讨论】:

          【解决方案5】:

          可能是这样的

          list2 = ['1','2','3','4','5']
          
          target_idexes = [2, 5]
          
          my_list = []
          for i in list2:
              my_list.append(i) if int(i) in target_idexes else 0
          
          print(my_list)    # ['2', '5']
          

          或者如果在 list2 中不仅是数字:

          list2 = ['1','2','3','4','5']
          
          target_idexes = [2, 5]
          
          my_list = []
          for i in list2:
              my_list.append(i) if list2.index(i) in target_idexes else 0
          
          print(my_list)    # ['3'] because indexing start from 0 and 5 is out of range
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-03-26
            • 1970-01-01
            • 1970-01-01
            • 2020-11-22
            • 2020-10-11
            • 2018-12-11
            • 1970-01-01
            • 2019-05-15
            相关资源
            最近更新 更多