2016-12-29 6 views
0
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 

где ключ - это выбор пользователей, D - список кортежей, а хэш-код просто равен хешу.Удаление кортежа из списка

например, поп («привет», D, хэш), следует удалить кортеж из D, например, кортеж в настоящее время является (хэш (ключ), ключ, значение)

так сказать, есть кортеж в D (значение хеш-ключа является случайным) для элемента в D, если ключ в элементе равен тому, который указан пользователем, затем верните «значение» (элемент [2]) и удалите весь кортеж, но он не снимая кортеж, D остается той же

, например, если я вызываю функцию

pop("hello", D, hasher) 

он не работает

+0

You 'возвращенной детали [2]'. Когда функция возвращает это, прекращается выполнение –

ответ

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

функция не будет выполнять код после return заявление, вам необходимо переключить remove и print с обратным утверждением:

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

Тем не менее, это плохая идея, чтобы изменить список в то время как цикл через него.

1

Вы должны удалить деталь перед return:

if key in item: 
    D.remove(item) 
    return item[2] 
Смежные вопросы