【问题标题】:List won't substract specified numbers列表不会减去特定数字
【发布时间】:2021-03-21 14:12:02
【问题描述】:

我还是编程新手,需要一些帮助 我想从列表中大于 9 的数字中减去 9。

ls = [1, 2, 3, 4 ,5, 6, 7, 8, 9]
odd_num = []
for _ in ls[::2]:
    odd_num.append(_)
    ls.remove(_)    
for _ in odd_num:
    multip_elem = _ * 2
    ls.append(multip_elem)
for _ in ls:
    if _ > 9:
        substraction = _ - 9
        ls.append(substraction)
        ls.remove(_)
print(ls)

这是输出

[2, 4, 6, 8, 2, 6, 14, 1, 9]

14 仍在列表中,但我很确定大于 9 :))

【问题讨论】:

标签: python list for-loop if-statement


【解决方案1】:
ls = [1, 2, 3, 4 ,5, 6, 7, 8, 9, 10, 11]
ls = [i-9 if i>9 else i for i in ls]
print(ls)

一种将一个列表转换为另一个列表的 Pythonic 方式。 它使用一种称为列表理解的机制。 我跳过了奇数部分,以简化它。 这种方法首先创建一个新列表,然后将其分配给同一个变量。

请注意,在迭代列表(添加和删除项目)时修改列表通常不是一个好主意。

【讨论】:

    【解决方案2】:

    你不应该在迭代列表时修改它,这总是会导致问题;)


    您最好使用它的索引对其进行迭代,并直接替换该值

    for i in range(len(ls)):
        if ls[i] > 9:
            ls[i] -= 9
    

    或者使用列表推导从ls 创建一个新列表:

    ls = [i-9 if i>9 else i for i in ls]
    

    【讨论】:

      【解决方案3】:

      上面有更好的答案(例如@Mirronelli),但我试图让这个答案尽可能接近您的原始代码,以防您需要保持类似的结构。

      ls = [1, 2, 3, 4 ,5, 6, 7, 8, 9]
      odd_num = []
      for element in ls:
          # Separate list into odd and even numbers
          if element % 2 != 0:
              # Create your odd list
              odd_num.append(element)
              ls.remove(element)
      
      # You don't need to do append here
      # Just use a list comprehension
      odd_num = [element * 2 for element in odd_num]
      
      # Again, you don't need append/remove here
      # Just use a list comprehension
      ls = [element for element in ls if element < 9]
      
      print(ls)
      

      【讨论】:

        猜你喜欢
        • 2021-12-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多