我有以下3个Python列表:
cl_ambient = ['BRy', 'WilmB', 'Hgan', 'FoVx', 'Afree', 'FoVx_d', 'Afree_d']
temp_farh = ['grey', 'DarkOrange', 'r', 'black', 'black', 'black', 'black']
manual_calib = ['white', 'white', 'white', 'blue', 'yellow', 'green', 'darkgreen']
所有3个列表的长度始终相同。
从列表cl_ambient
开始:
我需要找到cl_ambient
中元素的索引,它是另一个元素的子串。在这种情况下,
这些元素的索引在索引3,5(Fovx,Fovx_d)和4,6(Afree,Afree_d)。
现在,一旦找到这些索引,我需要使用这些索引在其他两个列表中进行替换:
我需要用较低的索引元素替换其他2个列表(temp_farh
和manual_calib
)中的较高索引元素
来自manual_calib
列表。因此,如果我们手动执行此操作,则替换应为:
temp_farh[5] = temp_farh[3]
temp_farh[6] = temp_farh[4]
manual_calib[5] = temp_farh[3]
manual_calib[6] = temp_farh[4]
我需要以编程方式进行这些替换。我不能手动执行此操作,因为列表可能很长。
必填项:
输出应为:
cl_ambient = ['BRy', 'WilmB', 'Hgan', 'FoVx', 'Afree', 'FoVx_d', 'Afree_d']
temp_farh = ['grey', 'DarkOrange', 'r', 'black', 'black', 'blue', 'yellow']
manual_calib = ['white', 'white', 'white', 'blue', 'yellow', 'blue', 'yellow']
问题:
有没有办法从这3个列表中以编程方式提取这些子字符串元素?
其他信息:
cl_ambient
列表中存在超过2个子字符串的情况。示例:FoVx
,FoVx_d
,FoVx_a
将不存在。只有Fovx_d
或Fovx_a
。cl_ambient
列表中的较长元素之前。答案 0 :(得分:2)
答案分为两部分,首先找到我们要替换的所需索引,然后进行替换
代码:
cl_ambient = ['BRy', 'WilmB', 'Hgan', 'FoVx', 'Afree', 'FoVx_d', 'Afree_d']
temp_farh = ['grey', 'DarkOrange', 'r', 'black', 'black', 'black', 'black']
manual_calib = ['white', 'white', 'white', 'blue', 'yellow', 'green', 'darkgreen']
# for each index search match on the higher indexes,
# if found save it on the changes list as (high, low) tuple
changes = [(i+1+j, i) for i, s1 in enumerate(cl_ambient)
for j, s2 in enumerate(cl_ambient[i+1:])
if (s1 in s2 or s2 in s1)]
print(changes)
# do the change on both lists
for i, j in changes:
temp_farh[i] = manual_calib[j]
manual_calib[i] = manual_calib[j]
print(temp_farh)
print(manual_calib)
输出:
[(5, 3), (6, 4)]
['grey', 'DarkOrange', 'r', 'black', 'black', 'blue', 'yellow']
['white', 'white', 'white', 'blue', 'yellow', 'blue', 'yellow']