【问题标题】:Python 3 insert problemsPython 3 插入问题
【发布时间】:2019-03-11 07:42:09
【问题描述】:

所以我刚刚开始学习 python 和一般的编程新手。我正在编写代码来回答 Hackerrank 学习代码“列表” (Here)

我在使用列表时遇到了问题,我已经编写了一个程序来多次编辑列表,但由于某种原因,如果我使用 .insert() 它可以处理某些输入,但不能处理其他输入。如果解释不当,我深表歉意。

如果我输入“insert 1 55”,它会将 55 插入 ML1,但是如果我输入“insert 1 48”,它会将 1 添加到 ML1,所以我很困惑为什么它对不同值的反应不同输入。

任何帮助将不胜感激!


import math

ML=[]

while True:
 try:
  List1=input().split()
  List2=map(int, List1[1:])
  List3=list(set(List2))

  if List1[0]=="insert":
   ML.insert((List3[0]), (List3[1]))
  elif List1[0]=="print":
   print(ML)
  elif List1[0]=="remove":
   ML.remove(List3[0])
  elif List1[0]=="append":
   ML.append(List3[0])
  elif List1[0]=="sort":
   ML.sort()
  elif List1[0]=="pop":
   ML.pop()
  elif List1[0]=="reverse":
   ML.reverse()
  else:
   pass
 except ValueError:
  print("oops")

输出:

插入 1 55

打印

[55]

插入 1 44

打印

[55, 44]

插入 1 48

打印

[55, 44, 1]

【问题讨论】:

    标签: python-3.x list while-loop insert try-catch


    【解决方案1】:

    我已经测试了您的代码,这似乎是合乎逻辑的! 有问题只针对 48。 我不知道为什么直到知道。您可以使用它来修复它:

    List3 = list(List2)
    

    【讨论】:

      【解决方案2】:

      哇,这是一个非常有趣的问题,我发现了问题所在,就在这一行:

      List3=list(set(List2))
      

      问题在于 set 正在改变列表的顺序:

      >>> set([1, 48])
      {48, 1}
      >>> set([1, 50])
      {1, 50}
      

      所以解决方案就是删除 set() 并执行 List3 = list(List2)。我猜你得到不同订单的原因是因为一个集合不跟踪订单,因为它被实现为一个哈希表。

      【讨论】:

      • 你太棒了!再次感谢您!
      • 你太客气了:)
      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多