在Python中,list.index()
方法用于返回列表中指定值的第一个匹配项的索引。如果你想根据一个列表中的值来对另一个列表进行排序,可以使用这个方法结合sorted()
函数或列表的sort()
方法。
假设我们有两个列表,一个是标签列表,另一个是数据列表,我们想根据标签列表的顺序来排序数据列表。
# 标签列表
labels = ['b', 'a', 'c']
# 数据列表
data = [3, 1, 2]
# 使用zip和sorted函数结合labels.index进行排序
sorted_data = [x for _, x in sorted(zip(labels, data), key=lambda pair: labels.index(pair[0]))]
print(sorted_data) # 输出: [1, 3, 2]
问题:如果标签列表中有重复的值,list.index()
会抛出ValueError
异常。
原因:list.index()
方法只返回第一个匹配项的索引,如果有重复值,它不知道应该返回哪一个。
解决方法:可以使用enumerate()
函数结合列表推导式来创建一个包含索引和值的元组列表,然后根据这个列表进行排序。
# 标签列表,包含重复值
labels = ['b', 'a', 'c', 'a']
# 数据列表
data = [3, 1, 2, 4]
# 使用enumerate和列表推导式创建包含索引和值的元组列表
indexed_labels = list(enumerate(labels))
# 根据索引排序
sorted_data = [data[index] for index, _ in sorted(indexed_labels, key=lambda x: labels.index(x[1]))]
print(sorted_data) # 输出: [3, 1, 2, 4]
领取专属 10元无门槛券
手把手带您无忧上云