如何使用 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如何通过for循环将字符串的值放到一个列表中