如何在更改某些值的同时将两个列表合并为一个?

时间:2019-07-03 02:18:09

标签: python list

我正在从事我的第一个编码项目,即制作文本编码器。完成后,我计划制作与之配对的解码器。现在,我很难让两个列表合并/重叠。抱歉,如果我要显示的内容具有引用它的真实名称,我是编码新手,仍然学习很多东西。

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 个答案:

答案 0 :(得分:2)

在列表理解中将<!doctype html> <html class="no-js" lang=""> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title></title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <script type="text/javascript" src="http://example.com/wp-includes/js/jquery/jquery.js?ver=1.12.4"></script> </head> <body> <form action="/form-action" method="GET"> <input id="autoaddress" name="address" type="text" placeholder="Address"> <button class="button button__primary">Show Address</button> </form> <script type="text/javascript" src="http://example.com/wp-content/themes/divi/scripts/custom.js"></script> <!-- where initmap function exists --> <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=some_valid_random_key&amp;libraries=places%2Cgeometry&amp;callback=initMap&amp;ver=1"></script> </body> </html>zip一起使用:

isinstance

答案 1 :(得分:1)

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]

答案 2 :(得分:1)

正如@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]

答案 3 :(得分:0)

为什么不maxisinstance

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]

答案 4 :(得分:-2)

list3 = [x if not str(x).isalpha() else list2[i] for i, x in enumerate(list1)]

已验证

答案 5 :(得分:-2)

这是一个建议,如果您不太在意合并列表的顺序

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]