Python在几个列表中替换字符串

时间:2017-06-19 10:05:02

标签: python string replace

我想根据另一个列表替换多个列表中的特定字符串。 这是一个例子

Diag2= [['09 2F 59', 'FC1'], ['09 0A 54', 'FC1'], ['09 10 74', 'FC4'], ['19 1E 19', 'FC5'], ['18 1E 4B', 'FC2'], ['19 1E 71', 'FC4']]

Data1=[['09 2F 59', '500.0', 'FC7', 'S6'], ['09 0A 54', '100.0','FC9'], ['09 10 74', '500.0','FC4', 'S99'], ['19 1E 19', '100.0','FC5', 'S1'], ['18 1E 4B','500.0', 'FC2', 'S1'],
       ['19 1E 71', '500.0','FC4', 'S6']]

for i in Data1:
    for j in Diag2:
            if(j[0] == i[0]):
                ??

我正在比较第一个数据,我想用第一个字符串替换第二个字符串。

输出应显示为:Data1=[['09 2F 59', '500.0', 'FC1', 'S6'], ['09 0A 54', '100.0','FC1']....

但我没有取代现有数据。我总是得到旧数据。:(

2 个答案:

答案 0 :(得分:0)

如果您使用字典而不是Diag2的列表,则问题会变得更加容易:

Diag2 = dict([['09 2F 59', 'FC1'], ['09 0A 54', 'FC1'], ['09 10 74', 'FC4'], ['19 1E 19', 'FC5'], ['18 1E 4B', 'FC2'], ['19 1E 71', 'FC4']])
# {'19 1E 71': 'FC4', '09 10 74': 'FC4', '09 2F 59': 'FC1', '09 0A 54': 'FC1', '19 1E 19': 'FC5', '18 1E 4B': 'FC2'}

您不需要为每个Diag2元素迭代Data1,然后。

Data1 = [
    ['09 2F 59', '500.0', 'FC7', 'S6'],
    ['09 0A 54', '100.0', 'FC9'],
    ['09 10 74', '500.0', 'FC4', 'S99'],
    ['19 1E 19', '100.0', 'FC5', 'S1'],
    ['18 1E 4B', '500.0', 'FC2', 'S1'],
    ['19 1E 71', '500.0', 'FC4', 'S6'],
    ['XX YY ZZ', '500.0', 'FC4', 'S6']]

print([l[:2] + [Diag2.get(l[0], l[2])] + l[3:] for l in Data1])
# [['09 2F 59', '500.0', 'FC1', 'S6'], ['09 0A 54', '100.0', 'FC1'], ['09 10 74', '500.0', 'FC4', 'S99'], ['19 1E 19', '100.0', 'FC5', 'S1'], ['18 1E 4B', '500.0', 'FC2', 'S1'], ['19 1E 71', '500.0', 'FC4', 'S6'], ['XX YY ZZ', '500.0', 'FC4', 'S6']]

l[:2] + [Diag2.get(l[0], l[2])] + l[3:]表示:

  • l
  • 的2个第一个元素
  • 密钥Diag2的{​​{1}}对应值。如果不存在,请使用l[0]代替
  • 在{3}之后的l[2]元素(如果存在)

答案 1 :(得分:0)

使用zip()聚合列表中的元素,然后为每对构建一个新列表:

>>> [[x[0], y[1], x[1], *y[3:]] for x, y in zip(Diag2, Data1)]
[['09 2F 59', '500.0', 'FC1', 'S6'], ['09 0A 54', '100.0', 'FC1'], ['09 10 74', '500.0', 'FC4', 'S99'], ['19 1E 19', '100.0', 'FC5', 'S1'], ['18 1E 4B', '500.0', 'FC2', 'S1'], ['19 1E 71', '500.0', 'FC4', 'S6']]

请注意,Python 3.5 +支持*解压缩运算符的这种用法。