基于inpu更改列表顺序

2024-09-30 14:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单,如下所示

[('Jon', '177'), ('Danei', '1420'), ('Adan', '146'), ('Gabriel', '110'), ('Chase', '117'), ('Hetmyer', '418'), ('Smith', '162')]

这实际上是一个定制的排序列表,我想通过固定列表中的第一个元素来改变它的顺序,即如果我给Hetmyer作为输入,新列表应该是这样的

[('Hetmyer', '418'), ('Smith', '162'),('Jon', '177'), ('Danei', '1420'), ('Adan', '146'), ('Gabriel', '110'), ('Chase', '117')]

如果我把Adan作为输入,新列表应该是这样的

[('Adan', '146'), ('Gabriel', '110'), ('Chase', '117'), ('Hetmyer', '418'), ('Smith', '162'),('Jon', '177'), ('Danei', '1420') ]

基本上,无论我给出什么样的输入,它都应该成为列表的第一个成员,其余的顺序都应该按原样进行,也就是说,它应该从输入开始,在输入成员之前以列表的成员结束,我们有什么内置函数吗


Tags: 函数元素列表排序顺序成员内置smith
3条回答

您可以使用^{}继续查找元素,然后使用^{}继续切片:

def resort(name_list, name):
    """Return the given name_list ordered using the given name."""
    index = list(zip(*name_list))[0].index(name)
    return name_list[:index] + name_list[index:]

resort(names, "Danei")

结果:

[('Jon', '177'),
 ('Danei', '1420'),
 ('Adan', '146'),
 ('Gabriel', '110'),
 ('Chase', '117'),
 ('Hetmyer', '418'),
 ('Smith', '162')]

找到位置:

for i, item in enumerate(l):
    if item[0] == "Hetmyer":
        pos = i

创建新列表:

m = l[pos:] + l[:pos]

结果:

[('Hetmyer', '418'), ('Smith', '162'), ('Jon', '177'), ('Danei', '1420'), ('Adan', '146'), ('Gabriel', '110'), ('Chase', '117')]
s = input()

 a = [('Jon', '177'), ('Danei', '1420'), ('Adan', '146'), ('Gabriel', '110'), ('Chase', '117'), ('Hetmyer', '418'), ('Smith', '162')]


for i in a:
    if i[0] == s:
        a = a[a.index(i):] + a[:a.index(i)]

print(a) #[('Adan', '146'), ('Gabriel', '110'), ('Chase', '117'), ('Hetmyer', '418'), ('Smith', '162'), ('Jon', '177'), ('Danei', '1420')]

相关问题 更多 >