2015-05-13 2 views
3

Я пытаюсь получить индекс списка 2-кортежей в Python, где 0 индекс каждого кортежа 'a':Найти индекс списка кортежей с nondistinct значениями первого индекса кортежа

list_of_tuples = [('a', 1), ('a', 2), ('a', 3)] 

Итак, я использую следующее понимание списка, чтобы попытаться выяснить, какой индекс возвращается, правильно?

index_list = [x for x, y in enumerate(list_of_tuples) if x[0] == 'a'] 

Что дает следующее сообщение об ошибке:

TypeError         Traceback (most recent call last) 
<ipython-input-22-5d47328b7d9a> in <module>() 
----> 1 index_list = [x for x, y in enumerate(list_of_tuples) if x[0] ==  'a'] 

TypeError: 'int' object is not subscriptable 

Как узнать индекс, связанный с поиском список кортежей для значения в 0-й индекс равен 'a'?

ответ

1

Используйте значение y для сравнения не индекс x:

list_of_tuples = [('a', 1), ('a', 2), ('a', 3)] 
index_list = [x for x, y in enumerate(list_of_tuples) if y[0] == 'a'] 

index_list является [0, 1, 2].

0
for x,y in enumerate(my_tuples): 
    print x,"=x" 
    print y,"=y" 

вы должны немедленно увидеть проблему с x[0] == 'a'

Я считаю

index_list = [x for x, y in enumerate(list_of_tuples) if y[0] == 'a'] 

должны работать лучше для вас

1

x - это индекс. Вы должны получить доступ к первому элементу y -> y[0]. y - это каждый кортеж в вашем списке. Вы также можете распаковать:

list_of_tuples = [('a', 1), ('a', 2), ('a', 3)] 
index_list = [ind for ind, (a, _) in enumerate(list_of_tuples) if a == 'a'] 
print(index_list) 
[0, 1, 2] 

Если вы print(list(enumerate(list_of_tuples))) вы можете увидеть первый элемент является индексом, а второй ваш кортеж:

[(0, ('a', 1)), (1, ('a', 2)), (2, ('a', 3))] 

Таким образом, вы пытаетесь индексировать 0 -> 0[0] с x[0].

1

Сначала я рекомендую вам проверить свои данные.

list_of_tuples = [('a', 1), ('a', 2), ('a', 3)] 
print list(enumerate(list_of_tuples)) 
# [(0, ('a', 1)), (1, ('a', 2)), (2, ('a', 3))] 
    ^ ^-----^ 
    x  y 

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

index_list = [x for x, y in enumerate(list_of_tuples) if y[0] == 'a'] 
print index_list 
Смежные вопросы