Печатать только четные числа во вложенных списках - PullRequest
1 голос
/ 22 июня 2019

Вот что у меня есть:

mylist1 = [[1,2,3], [4,5,6], [7,8,9]]   

for i in mylist1:
    if i[0] % 2 == 0:
        print(i[0])
    if i[1] % 2 == 0:
        print(i[1])
    if i[2] % 2 == 0:
        print(i[2])

Есть ли более короткий путь?

Ответы [ 6 ]

1 голос
/ 22 июня 2019

Вы можете использовать фильтр с itertools 'chain.from_iterable:

from itertools import chain
mylist1 = [[1,2,3], [4,5,6], [7,8,9]]   

print(list(filter(lambda x: x % 2 == 0, chain.from_iterable(mylist1))))

# [2, 4, 6, 8]
1 голос
/ 22 июня 2019

Понимание списка?

print('\n'.join(str(i) for sublist in mylist1 for i in sublist if i % 2 == 0))

Меньше понимания хардкорного списка?

for sublist in mylist1:
    print('\n'.join(i for i in sublist if i % 2 == 0))

Для цикла?

for sublist in mylist1:
    for i in sublist:
        if i % 2 == 0:
            print(i)
0 голосов
/ 22 июня 2019

Еще один вариант, однострочный, который не использует импорт:

print(*[val for lst in mylist1 for val in filter(lambda x: x & 1 == 0, lst)])

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

print(*[val for lst in mylist1 for val in filter(lambda x: x & 1 == 0, lst)], sep = "\n")
0 голосов
/ 22 июня 2019

Вы можете просто передать *param на chain:

from itertools import chain
[i for i in chain(*mylist1) if i % 2 == 0]
0 голосов
/ 22 июня 2019

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

mylist1 = [[1,2,3], [4,5,6], [7,8,9]]  
for x in mylist1:
    for y in x:
        if y%2 == 0:
            print(y)

Если вы не просите, чтобы это было быстрее с точки зрения процессорного времени, в этом случае я бы, вероятно, использовал numpy. Продолжай экспериментировать, приятель!

0 голосов
/ 22 июня 2019

Вы можете использовать вложенный цикл, попробуйте это.

mylist1 = [[1,2,3], [4,5,6], [7,8,9]]   

for i in mylist1:
    for j in i:
        if j % 2 == 0:
            print(j)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...