根据元组中的值将元组插入有序列表中

时间:2017-01-06 12:19:41

标签: python python-3.x

我正在尝试找到一种方法,在维护顺序的同时将一个元组添加到列表中。例如,我有一个列表。 [(1, 'a'), (3, 'y'), (4, 'd')] 并且希望能够自动插入另一个可能是(2,'q')的元组,它会自动将它放在(1,'a')和(3,'y')之间而不知道索引。

先谢谢

4 个答案:

答案 0 :(得分:0)

如果您的数据始终排序,bisect模块将为您提供高效方式来查找插入点。

如果数字确定了插入点,您可以这样做:

import bisect

data = [(1, 'a'), (3, 'y'), (4, 'd')]
bisect.insort(data, (2, 'q'))
print(data)  # [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')]

如果信件是插入的关键,您需要保留一份“日记”。列表中的字母:

import bisect

data = [(1, 'a'), (3, 'y'), (4, 'd')]
keys = [r[1] for r in data]         # precomputed list of keys

index = bisect.bisect(keys, 'q')

data.insert(index, (2, 'q'))
keys.insert(index, 'q')

print(data)  # [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')]
print(keys)  # ['a', 'q', 'y', 'd']

list.insert(x[, start[, end]])将进行实际插入。

答案 1 :(得分:0)

您可以使用Python bisect模块。

import bisect

l = [(1, 'a'), (3, 'y'), (4, 'd')]
bisect.insort(l, (2, 'q'))

print (l)
>> [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')]

答案 2 :(得分:-1)

您可以使用list.insert。来自documentation

  

在指定位置插入项目。第一个参数是要插入的元素的索引,因此a.insert(0,x)插入列表的前面,而a.insert(len(a),x)等同于a.append( x)的

<强>代码

l = [(1, 'a'), (3, 'y'), (4, 'd')]
l.insert(1, (2, 'q'))

print(l)

<强>输出

[(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')]

编辑:此答案假设您只是想在列表中插入该特定元组,以便新列表按第一个元组元素按升序排序。如果您需要的话,我没有为一般情况提供解决方案。

答案 3 :(得分:-1)

使用 yourlist.insert(位置,值)

li = [(1, 'a'), (3, 'y'), (4, 'd')]
li.insert(1,(2,'q'))
print "list :",li

输出:

<强> list : [(1, 'a'), (2, 'q'), (3, 'y'), (4, 'd')]