Как заархивировать элементы в 2 списках только при выполнении условия - python - PullRequest
0 голосов
/ 08 марта 2019

Когда у меня есть два списка:

list1 = ['course1', 'course2', 'course3', 'course4', 'course5']
list2 = [12, 3, 3, 4, 5]

Я хочу сжать элементы индекса только вместе, если условие выполнено. В противном случае для элемента индекса списка: 0.

Ответы [ 4 ]

1 голос
/ 08 марта 2019

Я предлагаю более короткую версию, используя понимание списка:

[x for x in zip(list1, list2) if x[1] >= 5.5]

1 голос
/ 08 марта 2019

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

list3 = [[i,j] for i,j in zip(list1, list2) if j>=5.5]

ВЫХОД :

[['course1', 12]]
0 голосов
/ 08 марта 2019

молнии с map():

list1 = ['course1', 'course2', 'course3', 'course4', 'course5']
list2 = [12, 3, 3, 4, 5]

m = map(lambda x, y: (x, y) if y > 5.5 else None, list1, list2)
list(filter(None.__ne__, m))
# [('course1', 12)]
0 голосов
/ 08 марта 2019

Забудьте zip и создайте собственное решение:

list1 = ['course1', 'course2', 'course3', 'course4', 'course5']
list2 = [12, 3, 3, 4, 5]


def zip_condition(list_a, list_b, func):
    iter_a = iter(list_a)
    iter_b = iter(list_b)
    while 1:
        try:
            a, b = next(iter_a), next(iter_b)
        except StopIteration:
            return
        if func((a, b)):
            yield (a, b)


result = list(zip_condition(list1, list2, lambda x: x[1] >= 5.5))
print(result)
...