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