首页 > 解决方案 > 将项目添加到列表中的特定位置

问题描述

x=len(sorted_list)
z=1
for y in range (2,x):
    if sorted_list[y][1]=="0" and len(sorted_list[y])>3:
        z+=1
        sorted_list.insert(y,'Message '+ str(z))
        x+=1
    else:
        continue

我有一个名为“sorted_list”的列表。我想将一些项目添加到列表中,但我遇到了问题。当我尝试此代码时,它会变为无穷大。我想按第 0 个索引对数字进行分组。我有这样的输入:

[['65', '0', 'Hello'],
['65', '1', 'world'],
['78', '0', "what's"],
['78', '1', 'up']]

我想要这样的输出:

Message 1
65 0 Hello 
65 1 world
Message 2
78 0 what's
78 1 up

标签: pythonpython-3.x

解决方案


一般来说,在迭代列表时尝试修改列表并不是一个好主意,因为这很容易让自己感到困惑。由于您只想打印散布有额外消息的列表内容,我认为最好不要修改列表并在迭代时打印消息。

根据特定标准(在本例中为每个列表的第 0 个索引)对事物进行分组的简单方法是使用itertools.groupby

>>> from itertools import groupby
>>> for i, (_, group) in enumerate(groupby(sorted_list, lambda i: i[0])):
...     print(f"Message {i+1}")
...     for line in group:
...         print(" ".join(line))
...
Message 1
65 1 Hello
65 2 world
Message 2
78 2 what's
78 3 up

推荐阅读