使用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
的第三个值