создать кортеж с картой, с условным списком событий - PullRequest
0 голосов
/ 19 мая 2018

Вот мой код:

evenorodd=[1,2,3]
list1=['a','b','c']
list2=['A','B','C']

res = tuple(map(lambda x: True if x % 2 != 0 else False, evenorodd))

print(res)

вывод:

(False, True, False, True)

Я хочу это: элемент list1, если x% 2! = 0 (если элемент evenorodd нечетный) элемент list2 else (если элемент evenorodd четный) Вывод, который я ищу:

('a','B','c')

, и я хочу сделать это в одной строке

res = tuple(map(lambda x: ??? if x % 2 != 0 else ???, evenorodd))

Спасибо

Ответы [ 4 ]

0 голосов
/ 19 мая 2018

Вот решение, которое использует исключительно функции map и lambda:

tuple(map(lambda v: v[0] if v[2] % 2 else v[1], zip(list1, list2, evenorodd)))
0 голосов
/ 19 мая 2018

Вы можете использовать zip:

evenorodd=[1,2,3]
list1=['a','b','c']
list2=['A','B','C']
new_result = [a if c%2 == 0 else b for a, b, c in zip(list2, list1, evenorodd)]

Выход:

['a', 'B', 'c']
0 голосов
/ 19 мая 2018

Другой подход заключается в использовании numpy.where():

import numpy as np
tuple(np.where([i%2 for i in evenorodd], list1, list2))
0 голосов
/ 19 мая 2018

Примерно так:

res = tuple([x if not ind % 2 else y for ind, (x,y) in enumerate(zip(list1,list2))])
print(res)
#('a', 'B', 'c')
...