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)
它不起作用
答案 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语句切换remove
和print
:
...
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]