2014-03-26 1 views
1

У меня есть вложенный список, и я хочу проверить, содержится ли i на самом нижнем уровне моего списка (i - это первый из двух элементов одного «подписок»).Подстановочный знак для вложенного списка-запроса

1) Есть ли прямой способ сделать это?

2) Я попробовал следующее:

for i in randomlist: 
    if [i,randomlist.count(i)] in list1: 

Есть ли способ заменить randomlist.count(i) с шаблоном? Я попробовал *,%,...,, но не из них работал хорошо. Есть идеи? Спасибо заранее!

+1

вы можете дать пример ввода и вывода? – user3

+1

можете ли вы добавить пример случайного списка и желаемого результата? трудно понять, что вам нужно – Elisha

+0

Ввод показывает вложенный список с числами и их подсчетами в подсписках: [[86, 4], [67, 1], [89, 1], ...] вывод: мне нужно знать, находится ли число со своим подсчетом уже в списке (чтобы не добавлять его во второй раз), но подсчет неизвестен во время цикла for – user3017048

ответ

1

Я думаю, что вы хотите:

if any(l[0] == i for l in list1): 

Это только проверить первый элемент в каждом подсписке, что фактически то же самое, как имеющие второй элемент дикой карты.

+1

Этот синтаксис является незаконным. Я думаю, вы хотите удалить 'in'. – iCodez

+0

Я определенно сделал, да; спасибо – jonrsharpe

+0

Почему это незаконный синтаксис? Я запустил программу с и без 'in' и для случая без нее Python отображал синтаксическую ошибку. – user3017048

1

кажется, что это актуальная проблема:

вход показывает вложенный список с номерами и их подсчета в подсписков: [[86, 4], [67, 1], [89, 1] ...] вывод: мне нужно знать, является ли число с кол уже в списке (чтобы не добавить ему второй раз), но количество неизвестно во время цикла для

Существует два способа решения этой проблемы. Во-первых, если список не имеет дубликатов, просто преобразовать его в словарь:

numbers = dict([[86,4],[67,1],[89,1]]) 

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

# Fetch the number 
try: 
    count = numbers[14] 
except KeyError: 
    print('{} does not exist'.format(14)) 

# Another way to write the above is: 

count = numbers.get(14) 
if not count: 
    print('{} does not exist'.format(14)) 

# From a list of a numbers, add them only if they don't 
# exist in the dictionary: 

for i in list_of_numbers: 
    if i not in numbers.keys(): 
     numbers[i] = some_value 

Если уже дублирует в первоначальном списке, вы можете преобразовать его в словарю, но вам нужно сделать некоторую дополнительную работу, если вы хотите сохранить все значения для чисел:

from collections import defaultdict 

numbers = defaultdict(list) 

for key,value in original_list: 
    numbers[key].append(value) 

Теперь, если у вас есть повторяющиеся номера, все их значения сохраняются в списке. Вы все еще можете следовать той же логике:

for i in new_numbers: 
    numbers[i].append(new_value) 

Только теперь, если число уже существует, то new_value только будет добавлен в список существующих значений.

Наконец, если все, что вы хотите сделать, это добавить в список, если первый номер не существует:

numbers = set(i[0] for i in original_list) 

for i in new_numbers: 
    if i not in numbers: 
     original_list += [i, some_value] 
Смежные вопросы