如果条件匹配,则用另一个列表的项替换列表的项

2024-09-27 07:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有如下两个列表。我正在比较两个列表的项目,如果列表1的第一个项目存在于列表2的项目中,则用列表2的匹配项目替换列表1的项目,然后从列表2中删除该项目。然后它应该移到list1的第2项,依此类推。我有下面的代码,这是不正确的,但我不能找出方法。两个列表中的项目数可能不相同。你知道吗

list1 = ["abc", "abc", "abc", "xyz", "xyz"]
list2= ["abc123", "abc456", "abc000", "xyz111"]

for i in list1:
    for j in list2:
        if i in j:
            i.replace(i, j)
            list2.remove(j)
            continue
        else:
            continue

结果应为:

list1 = ["abc123", "abc456", "abc000", "xyz111", "xyz"]

Tags: 项目方法代码in列表forabccontinue
3条回答

我会用list comprehension^{}来表示:

from itertools import izip_longest # zip_longest for 3.x

list1 = [b if a in b else a 
         for a, b in izip_longest(list1, list2, fillvalue="")]
list2 = [a for a in list2 if a not in list1]

这会在第一步中保持两个列表之间的索引一致(与remove不同),然后清除list2。你知道吗

下面是另一个解决方案:

>>> list1 = ["abc", "abc", "abc", "xyz", "xyz"]
>>> list2= ["abc123", "abc456", "abc000", "xyz111"]
>>>
>>> [ list2[i] if i < len(list2) and list2[i].startswith(elem) 
...   else elem
...   for i, elem in enumerate(list1)]

输出:

['abc123', 'abc456', 'abc000', 'xyz111', 'xyz']

执行for i in list1操作时,得到的是列表的元素,而不是列表的位置。你知道吗

>>> for i in list1:
...    print(type(i))
... 
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>

为了正确地工作,你应该在这里做一些类似的事情,并在原地更改列表

>>> for i in range(len(list1)):
...    print(i)
... 
0
1
2
3
4

相关问题 更多 >

    热门问题