如何使用 Python 循环替换列表中的多个字符串?

Posted

技术标签:

【中文标题】如何使用 Python 循环替换列表中的多个字符串?【英文标题】:how do you replace multiple strings in a list using loop for python? 【发布时间】:2021-12-29 00:46:31 【问题描述】:

我想用另一个列表 a 中的元素替换列表 b 中的元素

#my list is
b = [('ba'),
 ('bb'),
 ('bc'),
 ('bd'),
 ('be'),
 ('bf'),
 ('bg'),
 ('bh'),
 ('bi')]

#The second list
a = [('bc_1'),
 ('bd_1'),
 ('be_1'),
 ('bf_1'),
 ('bg_1')]

我想将'bc', 'bd', 'be', 'bf', 'bg' 替换为'bc_1', 'bd_1', 'be_1', 'bf_1', 'bg_1'

我尝试了下一个代码

for i in a:
    if i in b:
      a = a.str.replace(i) 

但它不起作用

【问题讨论】:

【参考方案1】:

如果_ 之前的部分匹配,您想替换a 中的值。

避免不断循环a 的值的一种有效解决方案是首先构建一个字典来执行匹配。

然后使用简单的列表推导式。

a2 = e.split('_')[0]: e for e in a
output = [a2.get(e, e) for e in b]

输出:['ba', 'bb', 'bc_1', 'bd_1', 'be_1', 'bf_1', 'bg_1', 'bh', 'bi']

此解决方案将快得多,尤其是在大型数据集上,因为由于键的散列,字典中的索引是 O(1)。

a2 的内容:

'bc': 'bc_1', 'bd': 'bd_1', 'be': 'be_1', 'bf': 'bf_1', 'bg': 'bg_1'

【讨论】:

【参考方案2】:

试试这个:

output = []
for j in b:
    for i in a:
        if i.startswith(f"j_"):
            output.append(i)
            break
    else:  
        output.append(j)

然后

>>> output
['ba', 'bb', 'bc_1', 'bd_1', 'be_1', 'bf_1', 'bg_1', 'bh', 'bi']

【讨论】:

【参考方案3】:

比较b的两个字母和a的两个字母是否相同

for index, a_value in enumerate(b):
    for b_value in a:
        if a_value[0] == b_value[0] and a_value[1] == b_value[1]:
            b_value[index] = a_value

输出:

b = ['ba', 'bb', 'bc_1', 'bd_1', 'be_1', 'bf_1', 'bg_1', 'bh', 'bi']
比较目标的数量变化
for index, b_value in enumerate(b):
    length = len(b_value)
    for a_value in a:
        count = 0
        for k in range(length):
            if b_value[k] == a_value[k]:
                count += 1
            else:
                break
            if count == length:
                b[index] = a_value

【讨论】:

我会在比较次数发生变化的情况下添加答案。【参考方案4】:
for i in range(len(b)):
    for j in range(len(a)):
        if b[i] in a[j]:
            b[i]=a[j]

这应该可以为您完成这项工作。目前列表中的元素是整数。但是如果列表中的元素是元组,那么这将不起作用,因为元组不支持项目分配。您必须将 b 和 a 转换为列表列表,例如 a = [['bc_1'],['bd_1']] 等。然后下面的代码将起作用。

for i in range(len(b)):
    for j in range(len(a)):
        if b[i][0] in a[j][0]:
            b[i][0]=a[j][0]

【讨论】:

b[i] in a[j] 匹配范围太广。例如'b' in 'abc' 也是True

以上是关于如何使用 Python 循环替换列表中的多个字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用 while 循环计算列表中的字符串?

Python:用 re.sub 替换列表中的多个特定单词

求解python如何通过for循环将字符串的值放到一个列表中

Python:替换多个 for 循环、多个迭代器

如何在 re.sub 上迭代列表并使用 python 替换字符串中的变量?

python列表,如何批量查找替换