Python 无法将值插入到正确索引处的列表中

Python 无法将值插入到正确索引处的列表中,python,list,sorting,insertion,Python,List,Sorting,Insertion,我收到一个数字列表,我想对它们进行排序。 输入如下所示: 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]

我收到一个数字列表,我想对它们进行排序。 输入如下所示:

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。
那么我做错了什么呢?

您声明了一个空列表:

p = [] 
但是你可以调用
列表。在上面插入
。不幸的是,这会导致一些意想不到的副作用。注意:

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

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


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

p = [None] * len(flat_list) 

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

你应该认真研究你的问题的措辞

但我相信这可能是你想要的答案

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

我通过谷歌搜索发现了这一点,也许你也应该尝试一下。

@timgeb问题很清楚,不是吗?他们想知道为什么他们的代码不会产生排序输出。但是,他们应该显示原始输入,向我们显示
decks
我想你不明白
p=[]*(len(flat_list)-1)
在做什么。@Chris_Rands。我使用了一些恶作剧,因为OP似乎要问的问题无法回答,因为他没有提供任何关于其数据结构的上下文。@timgeb好吧,他们今天才加入,现在他们已经编辑好了,别忘了:)如果你的问题已经解决,你可以回答。
itemgetter
在这里什么都不做,它与排序(平面列表)
相同。不管怎样,我明白了,你并没有把他们最初的想法作为出发点,谢谢你告诉我。我不是很有经验,但我想看看我是否能回答这里的一些问题。只回答问题,当你知道答案时:)