2010-02-03 2 views

ответ

149

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

[item for item in a if item[0] == 1] 

Если вы просто ищете для кортежей с 1 в них:

[item for item in a if 1 in item] 
+12

Ах, список понимание. – HelloGoodbye

15

Читайте на List Comprehensions

[ (x,y) for x, y in a if x == 1 ] 

Также дочитать до generator functions и yield.

def filter_value(someList, value): 
    for x, y in someList: 
     if x == value : 
      yield x,y 

result= list(filter_value(a, 1)) 
+0

'if x == 1' должно быть' if x == value' – sambha

73

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

Например,

test = [("hi", 1), ("there", 2)] 
test = dict(test) 
print test["hi"] # prints 1 
+6

Как вы примените это к проблеме Брюса? – HelloGoodbye

+1

Хороший ответ (хотя, возможно, и не для этого вопроса). Хорошо работал для меня, чтобы определить, было ли значение в списке выбранных кортежей (например, если «привет» в тесте) – MagicLAMP

+4

На самом деле он не отвечает на вопрос, как предлагает MagicLAMP. В частности, 'dict (X)' преобразует X в словарь, где используется последний кортеж любого общего первого элемента, - это значение, которое используется. В примере OP это вернет (1,4) в отличие от обоих (1,2) и (1,4). – BBischof

0

filter функция может также предоставить интересное решение:

result = list(filter(lambda x: x.count(1) > 0, a)) 

который ищет кортежи в списке для любого вхождения 1. Если поиск ограничивается первым элементом, решение может быть изменено на:

result = list(filter(lambda x: x[0] == 1, a)) 
0

Используя функцию фильтра:

>>> def get_values(iterables, key_to_find):
return list(filter(lambda x:key_to_find in x, iterables)) >>> a = [(1,2),(1,4),(3,5),(5,7)] >>> get_values(a, 1) >>> [(1, 2), (1, 4)]