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

Python 根据元组中的值,将元组插入到有序列表中,python,python-3.x,Python,Python 3.x,我试图找到一种方法,在维护顺序的同时向列表中添加元组。例如,我有一个列表。 [(1,'a'),(3,'y'),(4,'d')] 并且希望能够自动插入另一个元组,例如(2,'q'),它会自动将它放在(1,'a')和(3,'y')之间,而我不知道索引 提前感谢您可以使用列表。插入。从: 在给定位置插入项目。第一个参数是要插入的元素的索引,因此a.insert(0,x)在列表的前面插入,而a.insert(len(a),x)相当于a.append(x) 代码 l = [(1, 'a'), (3, 'y

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


提前感谢

您可以使用
列表。插入
。从:

在给定位置插入项目。第一个参数是要插入的元素的索引,因此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)
li = [(1, 'a'), (3, 'y'), (4, 'd')]
li.insert(1,(2,'q'))
print "list :",li
输出

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

编辑:这个答案假设您只想在列表中插入那个特定的元组,这样新的列表将按照第一个元组元素的升序排列。如果您需要,我不会为一般情况提供解决方案。

您可以使用
list.insert
。从:

在给定位置插入项目。第一个参数是要插入的元素的索引,因此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)
li = [(1, 'a'), (3, 'y'), (4, 'd')]
li.insert(1,(2,'q'))
print "list :",li
输出

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

编辑:这个答案假设您只想在列表中插入那个特定的元组,这样新的列表将按照第一个元组元素的升序排列。如果您需要的话,我不会为一般情况提供解决方案。

如果您的数据总是经过排序,那么模块将为您提供一种找到插入点的有效方法

如果数字决定了插入点,则可以执行以下操作:

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']

将执行实际插入。

如果您的数据总是经过排序,则模块将为您提供查找插入点的有效方法

如果数字决定了插入点,则可以执行以下操作:

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']
将执行实际插入。

您可以使用Python模块

您可以使用Python模块


使用您的列表。插入(位置、值)

输出:


列表:[(1,'a'),(2,'q'),(3,'y'),(4,'d')]
使用您的列表。插入(位置,值)

输出:


列表:[(1,'a'),(2,'q'),(3,'y'),(4,'d')]
您知道前面的插入点,还是应该根据插入的元组的值来确定?换句话说,您是在寻找一般的排序顺序插入吗?我不知道前面的插入点。是的,我正在寻找一般排序顺序插入。回答者:这是一个明显的重复,请停止回答…你知道前面的插入点,还是应该根据插入的元组的值来确定?换句话说,您是在寻找一般的排序顺序插入吗?我不知道前面的插入点。是的,我正在寻找一般排序顺序插入。回答者:这是一个明显的重复,请停止回答。。。