Python 根据输入更改列表的顺序
我有一个列表,如下所示Python 根据输入更改列表的顺序,python,Python,我有一个列表,如下所示 [('Jon', '177'), ('Danei', '1420'), ('Adan', '146'), ('Gabriel', '110'), ('Chase', '117'), ('Hetmyer', '418'), ('Smith', '162')] 这实际上是一个自定义排序的列表,我想通过固定列表中的第一个元素来更改其顺序,即如果我将Hetmyer作为输入,则新列表应该如下所示 [('Hetmyer', '418'), ('Smith', '162'),('Jo
[('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') ]
基本上,我给出的任何输入都应该成为列表的第一个成员,其余的顺序应该按照原样进行,即它应该以输入开始,以输入成员之前的列表成员结束,我们是否有任何内置函数用于此查找位置:
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')]
您可以继续使用查找元素,然后继续切片:
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')]
你试过什么吗?有效吗?他的意思是你从列表中选择一个名字,然后这个名字和后面的项目应该移到列表的开头
[('Jon', '177'),
('Danei', '1420'),
('Adan', '146'),
('Gabriel', '110'),
('Chase', '117'),
('Hetmyer', '418'),
('Smith', '162')]