我想根据另一个列表替换多个列表中的特定字符串。 这是一个例子
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']....
但我没有取代现有数据。我总是得到旧数据。:(
答案 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
Diag2
的{{1}}对应值。如果不存在,请使用l[0]
代替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 +支持*
解压缩运算符的这种用法。