Python:更新元组列表

Geo*_*aou 6 python python-2.7 python-3.x

我有一个像这样的元组列表:

list = [(1,'q'),(2,'w'),(3,'e'),(4,'r')]

我试图创建一个更新功能更新(项目,数字),搜索列表中的项目,然后更改数字.

例如,如果我使用更新(w,6),结果将是

list =   [(1, 'q'), (6, 'w'), (3, 'e'), (4, 'r')]
Run Code Online (Sandbox Code Playgroud)

我试过这段代码,但我有错误

if item in heap:
        heap.remove(item)
        Pushheap(item,num)
    else:
        Pushheap(item,num)
Run Code Online (Sandbox Code Playgroud)

Pushheap是一个将堆中的元组推到任何想法的函数吗?

PM *_*ing 5

您可以直接扫描列表中查找带有所需字母的元组并替换整个元组(您无法修改元组),在找到所需项目后突破循环.例如,

lst = [(1, 'q'), (2, 'w'), (3, 'e'), (4, 'r')]

def update(item, num):
    for i, t in enumerate(lst):
        if t[1] == item:
            lst[i] = num, item
            break

update('w', 6)
print(lst)
Run Code Online (Sandbox Code Playgroud)

产量

[(1, 'q'), (6, 'w'), (3, 'e'), (4, 'r')]
Run Code Online (Sandbox Code Playgroud)

但是,您应该认真考虑使用字典而不是元组列表.搜索字典比在列表上进行线性扫描要有效得多.

  • @Rakesh_K`enumerate`是一个非常有用的功能.它不仅导致干净的紧凑代码,它比循环索引的"范围"和索引到列表(或其他有序集合)更快.顺便说一下,如果你想从零以外的某个数字开始计数,它可能需要一个额外的`start` arg. (3认同)