Как объединить два списка в один, изменяя некоторые значения? - PullRequest
1 голос
/ 03 июля 2019

Я работаю над своим самым первым проектом кодирования, который должен сделать кодировщик текста.После завершения я планирую сделать декодер, который будет сопрягаться с ним.На данный момент у меня проблемы с получением двух списков для совмещения / перекрытия.Я извиняюсь, если то, что я собираюсь показать, имеет действительное имя, которое ссылается на него, я новичок в кодировании и все еще учусь многим вещам.

list1 = [20.0, 'X', 'X', 46.0, 0.0, 18.0, 'X', 40.0]
list2 = ['Y', 31.0, 45.0, 'Y', 'Y', 'Y', 47.0, 'Y']

Мне нужно, чтобы результат был:

list3 = [20.0, 31.0, 45.0, 46.0, 0.0, 18.0, 47.0, 40.0]

Оба списка имеют одинаковое количество значений, и мне нужно объединить их в один список, сохранить числа в их текущем порядке и полностью исключить буквы "X" и "Y".

Ответы [ 6 ]

2 голосов
/ 03 июля 2019

Используйте zip с isinstance в понимании списка:

list1 = [20.0, 'X', 'X', 46.0, 0.0, 18.0, 'X', 40.0]
list2 = ['Y', 31.0, 45.0, 'Y', 'Y', 'Y', 47.0, 'Y']

list3 = [x if isinstance(x, float) else y for x, y in zip(list1, list2)]
# [20.0, 31.0, 45.0, 46.0, 0.0, 18.0, 47.0, 40.0]
1 голос
/ 03 июля 2019

Как сказал @Austin, используйте zip для объединения нескольких списков одинакового размера.

Вот версия, немного более понятная, если вы новичок в разработке

def get_number(item1, item2):
    if item1 in ['X', 'Y']:
        return item2
    else:
        return item1

[get_number(x, y) for x, y in zip(list1, list2)]

ВЫВОД: -

[20.0, 31.0, 45.0, 46.0, 0.0, 18.0, 47.0, 40.0]
1 голос
/ 03 июля 2019
list1 = [20.0, 'X', 'X', 46.0, 0.0, 18.0, 'X', 40.0]
list2 = ['Y', 31.0, 45.0, 'Y', 'Y', 'Y', 47.0, 'Y']

list3 = []

for x in range(len(list1)):
    if isinstance(list1[x], float):
        list3.append(list1[x])

    else:
        list3.append(list2[x])

print(list3)

ВЫВОД: -

[20.0, 31.0, 45.0, 46.0, 0.0, 18.0, 47.0, 40.0]
0 голосов
/ 03 июля 2019

Почему бы не max с isinstance:

print([max(i, key=lambda x: isinstance(x, float)) for i in zip(list1, list2)])

Вывод:

[20.0, 31.0, 45.0, 46.0, 0.0, 18.0, 47.0, 40.0]
0 голосов
/ 03 июля 2019

Это предложение, если вы серьезно не заботитесь о порядке составного списка

list1 = [20.0, 'X', 'X', 46.0, 0.0, 18.0, 'X', 40.0]
list2 = ['Y', 31.0, 45.0, 'Y', 'Y', 'Y', 47.0, 'Y']
a = list1 + list2
a = [x for x in a if not isinstance(x, str)]
>>>a
[20.0, 46.0, 0.0, 18.0, 40.0, 31.0, 45.0, 47.0]
0 голосов
/ 03 июля 2019
list3 = [x if not str(x).isalpha() else list2[i] for i, x in enumerate(list1)]

проверено

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