итерация по списку Python (список из второго элемента из другого списка) - PullRequest
0 голосов
/ 03 июня 2019

У меня есть список в форме:

[['id_5', 4], ['id_6', 4], ['id_7', 4], ['id_0', 12], ['id_1', 4], ['id_2', 8], ['id_3', 8], ['id_4', 4], ['id_8', 1]]
[['id_5', 5], ['id_6', 5], ['id_7', 5], ['id_0', 15], ['id_1', 5], ['id_2', 10], ['id_3', 10], ['id_4', 5]]

Мне нужен только второй элемент каждого списка.

Желаемый вывод:

[4,4,4,12,4,8,8,4,1]
[5,5,5,15,5,10,10,5]

Или:

4 4 4 12 4 8 8 4 1 
5 5 5 15 5 10 10 5 

Я попробовал этот код:

for i in range(0,len(vectorized)):
    for j in range (0,len(vectorized[i])):
        print(vectorized[i][j][1])

Но мой вывод:

4
4
4
12
4
...

Спасибо.

Ответы [ 4 ]

3 голосов
/ 03 июня 2019

Попробуйте понимание списка:

list1 = [['id_5', 4], ['id_6', 4], ['id_7', 4], ['id_0', 12], ['id_1', 4], ['id_2', 8], ['id_3', 8], ['id_4', 4], ['id_8', 1]]
list2 = [['id_5', 5], ['id_6', 5], ['id_7', 5], ['id_0', 15], ['id_1', 5], ['id_2', 10], ['id_3', 10], ['id_4', 5]]
list1_out = [i[1] for i in list1]
list2_out = [i[1] for i in list2]

Выход :

[4, 4, 4, 12, 4, 8, 8, 4, 1] # list1_out
[5, 5, 5, 15, 5, 10, 10, 5] # list2_out
2 голосов
/ 03 июня 2019

Существуют разные подходы, простое понимание подойдет:

[x[1] for x in l]

Также с map и operator.itemgetter:

from operator import itemgetter
list(map(itemgetter(1), l))

Для распечатки результатов вы можете вызвать распечатку с распаковкой:

print(*out_list)

Например:

>>> l = [['id_5', 4], ['id_6', 4], ['id_7', 4], ['id_0', 12], ['id_1', 4], ['id_2', 8], ['id_3', 8], ['id_4', 4], ['id_8
', 1]]
>>> from operator import itemgetter
>>> out_list = list(map(itemgetter(1), l))
>>> out_list
[4, 4, 4, 12, 4, 8, 8, 4, 1]
>>> print(*out_list)
4 4 4 12 4 8 8 4 1

Все как один лайнер:

>>> print(*(x[1] for x in l))
4 4 4 12 4 8 8 4 1
1 голос
/ 03 июня 2019

Попробуйте это:

a = [['id_5', 4], ['id_6', 4], ['id_7', 4], ['id_0', 12], ['id_1', 4], ['id_2', 8], ['id_3', 8], ['id_4', 4], ['id_8', 1]]
b = [['id_5', 5], ['id_6', 5], ['id_7', 5], ['id_0', 15], ['id_1', 5], ['id_2', 10], ['id_3', 10], ['id_4', 5]]
x = list(list(zip(*a))[1])
y = list(list(zip(*b))[1])
print(x)
print(y)

Выход: -

[4, 4, 4, 12, 4, 8, 8, 4, 1]
[5, 5, 5, 15, 5, 10, 10, 5]
0 голосов
/ 03 июня 2019

Если я не пропустил то, что вы слишком усложняете. Просто выполните итерацию по основному списку и напечатайте 2-й элемент списка, который вы получаете в каждом цикле, например ::

for i in big_list:
    print i[1]  

В Python есть несколько действительно хороших способов перебора списков, поэтому вам не нужно использовать метод range.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...