在python中使用列表进行查找和合并
给定两个长度相同的列表,我要执行的操作是在第二个列表中查找,并将结果合并到原始列表中。但是,查找的键和值会发生更改在python中使用列表进行查找和合并,python,performance,Python,Performance,给定两个长度相同的列表,我要执行的操作是在第二个列表中查找,并将结果合并到原始列表中。但是,查找的键和值会发生更改 # Input data = ["A", "ReplaceMe", "ReplaceMe", "A", "ReplaceMe", "C"] replace_values = ["Version1", "", "&
# Input
data = ["A", "ReplaceMe", "ReplaceMe", "A", "ReplaceMe", "C"]
replace_values = ["Version1", "", "", "Version2", "", ""]
# Expected output
['A', 'Version1', 'Version1', 'A', 'Version2', 'C']
def replace_elements(dataset, replacements):
for j, i in enumerate(dataset):
if i == "A":
replace_by = replacements[j]
if i == "ReplaceMe":
dataset[j] = replace_by
return dataset
我当前的实现完成了任务,但具有O(n)复杂性。我可以使用
dict
以更快的方式完成这项工作吗?这将使用熊猫
完成这项工作。它对replace_值
进行正向填充,然后用replace_值
中同一行的值替换ReplaceMe。其中:
import pandas as pd
data = ["A", "ReplaceMe", "ReplaceMe", "A", "ReplaceMe", "C"]
replace_values = ["Version1", "", "", "Version2", "", ""]
df = pd.DataFrame(zip(data,replace_values), columns=['data', 'replace_values']).replace('', None).ffill()
df['data'] = np.where(df['data'] == 'ReplaceMe', df['replace_values'], df['data'])
df['data'].tolist()
输出:
['A', 'Version1', 'Version1', 'A', 'Version2', 'C']
不,您不能超越O(n)实现,尽管使用数据结构进行查找,但无论如何,您必须对输入中的数据进行一次扫描 这是一个单行程序版本,使用walrus操作符,但我不认为这会更快:
[current if dt=='ReplaceMe' else dt for (dt,rp) in zip(data,replace_values) if (current := (rp if dt=='A' else current))]
非常感谢您在解决方案中加入
pandas