【问题标题】:Unable to insert values into a list at the correct index无法将值插入到正确索引处的列表中
【发布时间】:2018-02-19 12:30:33
【问题描述】:

我收到一个数字列表,我想对它们进行排序。 输入看起来像这样:

i:1,3,5,8
n:2
t:4,7
a:6
v:9

并以 txt 文件的形式出现。

代码如下所示:

flat_list = [item for sublist in decks for item in sublist]
p = [] 

for x in range(len(flat_list)):
    nr = flat_list[x][0]
    o = nr -1
    p.insert((o),(flat_list[x][1]))

print(p)

给出这个输出:

[(1, 'i'), (2, 'n'), (3, 'i'), (4, 't'), (5, 'i'), (6, 'a'), (8, 'i'), (7, 
 't'), (9, 'v')]

这几乎是我想要的,除了 7 和 8。 那我做错了什么?

【问题讨论】:

  • @timgeb 问题很清楚,不是吗?他们想知道为什么他们的代码没有产生排序的输出。但是,它们应该显示原始输入,向我们展示decks
  • 我认为你不明白 p = []*(len(flat_list)-1) 在做什么。
  • @Chris_Rands 有点像。我使用了一些 snark,因为 OP 提出的问题似乎无法回答,因为他没有提供有关他的数据结构的任何上下文。
  • @timgeb 好吧,他们今天才加入 SO,他们现在已经编辑过了,别忘了 :)
  • 如果您的问题得到解决,您可以accept 回答。

标签: python list sorting insertion


【解决方案1】:

你声明一个空列表:

p = [] 

但是你打电话给list.insert就可以了。不幸的是,这会导致一些意想不到的副作用。观察:

In [209]: p.insert(999, 0)

In [210]: p
Out[210]: [0]

它被插入到第 0th 位置,尽管您希望它在 (999 + 1)th 位置。这类事情是您在错误位置看到项目的原因,它们从一开始就没有正确插入。


解决方法是将[None] 列表相乘。此外,如果您迭代元素而不是它们的索引,您应该能够大大简化插入逻辑。

p = [None] * len(flat_list) 

for i, y in flat_list: 
    p[i - 1] = y

【讨论】:

    【解决方案2】:

    你真的应该努力表达你的问题。

    但我相信这可能是您正在寻找的答案。

    from operator import itemgetter
    flat_list = [(1,a),(6,b),(3,d),(7,c),(9,a),(4,b)]
    sorted(flat_list, key=itemgetter(0))
    

    我通过谷歌搜索找到了这个,也许你应该尝试一下。

    【讨论】:

    • itemgetter 在这里什么都不做,它和sorted(flat_list) 一样。无论如何,您不会以他们的初始输入为起点
    • 我明白了,谢谢你告诉我。我不是很有经验,但我想看看我是否可以在这里回答一些问题。
    • 只有当你知道答案时才回答问题:)
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多