从列表中删除元组

时间:2016-12-29 16:08:37

标签: python python-2.7 python-3.x tuples

D = [(01294135018, "hello", 500)]
def pop(key, D, hasher = hash):
    try: 
        for item in D:
            if key in item:
                return item[2]
                D.remove(item)
                print(D) #Just to check if it has been removed

    except KeyError:
         pass

其中key是用户选择,D是元组列表,而hasher等于hash。

例如pop(" hello",D,hash),应该从D中删除元组,例如元组当前是(散列(键),键,值)

所以说D中有一个元组(哈希键值是随机的),对于D中的项,如果项中的键等于用户指定的键,则返回"值" (项目[2])并删除整个元组,但它没有删除元组,D保持不变

例如,如果我调用函数

pop("hello", D, hasher) 

它不起作用

3 个答案:

答案 0 :(得分:1)

您只需使用列表解析即可完成此任务:

[tuple([y for y in x if y != 'hello']) for x in D]

在这种情况下,它会从'hello'中的每个元组中删除D。在这里,您可以使用它的功能形式:

def pop(key, D, hasher = hash):
    return [tuple([y for y in x if y != key]) for x in D]

<强>示例:

D = [(4135018, 'hello', 500), (12, 500, 'john')]
pop('john', D)

输出:[(4135018, 'hello', 500), (12, 500)]

D = [(4135018, 'hello', 500), (12, 500, 'john')]
pop(500, D)

输出:[(4135018, 'hello'), (12, 'john')]

答案 1 :(得分:1)

函数不会在return语句后执行代码,您需要使用return语句切换removeprint

...
if key in item:
    D.remove(item)
    print(D)
    return item[2]
...

在循环浏览列表时修改列表仍然是一个坏主意。

答案 2 :(得分:1)

您需要在return

之前删除您的项目
if key in item:
    D.remove(item)
    return item[2]