как получить индекс или сам элемент найденного элемента с помощью «if element in list» - PullRequest
2 голосов
/ 16 марта 2010

Существует ли прямой способ сделать это?

if element in aList:
   #get the element from the list

Я думаю что-то вроде этого:

aList = [ ([1,2,3],4) , ([5,6,7],8) ]
element = [5,6,7]
if element in aList
     #print the 8

Ответы [ 7 ]

3 голосов
/ 16 марта 2010
L = [([1, 2, 3], 4), ([5, 6, 7], 8)]
element = [5, 6, 7]

for a, b in L:
  if a == element:
    print b
    break
else:
  print "not found"

Но, похоже, вы хотите использовать словарь:

L = [([1, 2, 3], 4), ([5, 6, 7], 8)]
element = [5, 6, 7]

D = dict((tuple(a), b) for a, b in L)
# keys must be hashable: list is not, but tuple is
# or you could just build the dict directly:
#D = {(1,2,3): 4, (5,6,7): 8}

v = D.get(tuple(element))
if v is not None:
  print v
else:
  print "not found"

Обратите внимание, что, хотя есть более компактные формы, использующие next ниже, я представлял реальность вашего кода (а не надуманного примера), чтобы сделать что-то, по крайней мере, немного более сложным, чтобы использовать для , если и else , становится более читабельным с несколькими операторами.

1 голос
/ 16 марта 2010
>>> aList = [ ([1,2,3],4) , ([5,6,7],8) ]
>>> element = [5,6,7]

если вы хотите проверить, присутствует ли первый элемент

>>> any(element==x[0] for x in aList)
True

чтобы найти соответствующее значение

>>> next(x[1] for x in aList if element==x[0])
8
1 голос
/ 16 марта 2010

(Примечание: этот ответ относится к тексту вопроса, а не к примеру, приведенному в коде, который не совсем соответствует.)

Печать самого элемента не имеет никакого смысла, потому что он уже есть в тесте:

if element in lst:
    print element

Если вы хотите индекс, есть метод индекса:

if element in lst:
    print lst.index(element)

И, если вы спрашиваете об этом случайно, потому что вы хотите пройтись по списку и сделать что-то и со значением, и с индексом, обязательно используйте идиому перечисления:

for i, val in enumerate(lst):
  print "list index": i
  print "corresponding value": val
0 голосов
/ 16 марта 2010

Код в вашем вопросе довольно странный. Но, если вы изучаете основы:

Получение индекса элемента:

на самом деле все просто: list.index(element). Предполагая, конечно, элемент появляется только один раз. Если он появляется более одного раза, вы можете использовать дополнительные параметры:

list.index(element, start_index): здесь он начнет поиск с start_index. Там же:
list.index(element, start_index, end_index): Я думаю, это говорит само за себя.

Получение индекса в цикле for

Если вы зацикливаетесь на списке и хотите зациклить как индекс, так и элемент, то питонический способ - enumerate список:

for index, element in enumerate(some_list):
    # here, element is some_list[index]

Здесь enumerate - это функция, которая принимает список и возвращает список кортежей. Скажите, что ваш список ['a', 'b', 'c'], тогда enumerate вернется: [ (1, 'a'), (2, 'b'), (3, 'c') ]

Когда вы повторяете это, каждый элемент является кортежем, и вы можете распаковать этот кортеж.

распаковка кортежа в основном такая:

>>> t = (1, 'a')
>>> x, y = t
>>> t
(1, 'a')
>>> x
1
>>> y
'a'
>>> 
0 голосов
/ 16 марта 2010

Одно из возможных решений.

aList = [ ([1,2,3],4) , ([5,6,7],8) ]
element = [5,6,7]

>>> print(*[y for x,y in aList if element == x])
8
0 голосов
/ 16 марта 2010

[5, 6, 7] - это , а не элемент из aList, который вы показываете, поэтому if не удастся, и ваш заданный вопрос просто не относится.В более общем смысле цикл, подразумеваемый в таком if, все равно отбрасывает индекс.Чтобы заставить ваш фрагмент кода работать, вместо if было бы что-то вроде (Python 2.6 или лучше - привет, если вам нужно работать в разных версиях):

where = next((x for x in aList if x[0] == element), None)
if where:
  print(x[1])

Подробнеекак правило, выражения в next и в print должны зависеть от точной "мелкозернистой" структуры aList - в вашем примере x[0] и x[1] работают просто отлично, но в несколькоВ другом примере вам могут понадобиться разные выражения.Не существует «общего» способа, который полностью игнорировал бы, как ваши данные на самом деле структурированы и «все равно волшебным образом работают»! -)

0 голосов
/ 16 марта 2010
>>> aList = [ ([1,2,3],4) , ([5,6,7],8) ]
>>> for i in aList:
...     if [5,6,7] in i:
...          print i[-1]
...
8
...