将子列表列表替换为单引号(用逗号分隔)



使用Python3.x,我有一段代码可以生成X,其中子列表用逗号分隔。。。需要打印具有来自CCD_ 3的替换值的行CCD_。

X = ['sequence, A, 1, 2, 3', 
'sequence, B, 10, 20, 30', 
'sequence, C, 100, 200, 300']
Y = ['VEQ','1','map','2','cap',]

预期输出

'VEQ','1','A','2','1'
'VEQ','1','B','2','10'
'VEQ','1','C','2','100'

X[field2]替换Y[field3-map],用X[field3]替换Y[field5-cap]Y的其他字段将保持不变。

我已经尝试根据我的要求修改下面的参考代码,但没有成功。

# helper function to find elements  
def find_sub_idx(test_list, repl_list, start = 0): 
length = len(repl_list) 
for idx in range(start, len(test_list)): 
if test_list[idx : idx + length] == repl_list: 
return idx, idx + length 
# helper function to perform final task 
def replace_sub(test_list, repl_list, new_list): 
length = len(new_list) 
idx = 0
for start, end in iter(lambda: find_sub_idx(test_list, repl_list, idx), None): 
test_list[start : end] = new_list 
idx = start + length 

这里有一些简单且节省内存的东西(由于对地图的延迟评估(,我正在打印结果,因此只需要一份Y,并且可以覆盖:

X = ['sequence, A, 1, 2, 3', 
'sequence, B, 10, 20, 30', 
'sequence, C, 100, 200, 300']
Y = ['VEQ','1','map','2','cap',]
retval = Y[:]
for x in map(lambda x: str.split(x, ','), X):
retval[2] = x[1]
retval[4] = x[2]
print(retval)

如果你想把值存储在某个地方,你每次都需要有一个单独的Y副本:

X = ['sequence, A, 1, 2, 3', 
'sequence, B, 10, 20, 30', 
'sequence, C, 100, 200, 300']
Y = ['VEQ','1','map','2','cap',]
my_list = []
for x in map(lambda x: str.split(x, ','), X):
retval = Y[:]
retval[2] = x[1]
retval[4] = x[2]
my_list.append(retval)

不确定这是否是您想要的,但这里是:

X = ['sequence, A, 1, 2, 3', 
'sequence, B, 10, 20, 30', 
'sequence, C, 100, 200, 300']
Y = ['VEQ','1','map','2','cap',]
def replace(X,Y,position_list):
result = []
for x in X:
x = x.split(',')
x = [t.strip() for t in x]
temp = Y.copy()
for pos in position_list:
temp[pos[0] - 1] = x[pos[1] - 1]
result.append(temp)
return result
replace(X,Y,[(3,2),(5,3)])

输出:

[['VEQ', '1', 'A', '2', '1'],
['VEQ', '1', 'B', '2', '10'],
['VEQ', '1', 'C', '2', '100']]

这里position_list是要替换的(Y_pos,X_pos(元组的列表,例如(3,2)表示用X的第二个值替换Y的第三个值

最新更新