Python 将指定元素之间的列表元素替换为其他元素
如果我有两个列表:Python 将指定元素之间的列表元素替换为其他元素,python,Python,如果我有两个列表: listA = ['A','B','C','D','B','D','A','C'] listB = ['C','B','A','B','C','A','A','C','D','A','B'] 如何将'B'、'C'和'D'、'A'、listA[1到6]之间的所有元素替换为listB、listB[3到9]的相同字符之间的元素 因此listB最终将成为: listB = ['C','B','A','B','C','D','B','D','A','B'] listA最终将成为:
listA = ['A','B','C','D','B','D','A','C']
listB = ['C','B','A','B','C','A','A','C','D','A','B']
如何将'B'、'C'
和'D'、'A'
、listA[1到6]
之间的所有元素替换为listB
、listB[3到9]
的相同字符之间的元素
因此listB最终将成为:
listB = ['C','B','A','B','C','D','B','D','A','B']
listA最终将成为:
listA = ['A','C']
我创建了一个简单的循环,用于检查'B'、'C'和'D'、'a',并返回它们出现在以下位置的索引:
for i in range(len(gene1)):
if listA[i] == 'B':
if listA[i+1] == 'C':
return I
但是,如果字母序列在字符或长度上发生变化,则这将不起作用 您可以指定给切片;如果对两个对象都这样做,则可以就地交换这些块: 这首先用
listA[1:7]
切片中引用的所有值替换listB[3:10]
切片中的所有内容<代码>列表b可根据需要调整长度
如果您还需要确定起点和终点的位置,则必须首先扫描:
def find_markers(l):
start, stop = 0, 0
# iterate over a sliding window; current and next element
second = iter(l)
next(second, None)
for i, (a, b) in enumerate(zip(l, second)):
if (a, b) == ('B', 'C'):
start = i
elif (a, b) == ('D', 'A'):
end = i + 2
return start, end # exit early
a_start, a_end = find_markers(listA)
b_start, b_end = find_markers(listB)
listB[b_start:b_end] = listA[a_start:a_end]
listA[a_start:a_end] = []
您可以指定给切片;如果对两个对象都这样做,则可以就地交换这些块: 这首先用
listA[1:7]
切片中引用的所有值替换listB[3:10]
切片中的所有内容<代码>列表b可根据需要调整长度
如果您还需要确定起点和终点的位置,则必须首先扫描:
def find_markers(l):
start, stop = 0, 0
# iterate over a sliding window; current and next element
second = iter(l)
next(second, None)
for i, (a, b) in enumerate(zip(l, second)):
if (a, b) == ('B', 'C'):
start = i
elif (a, b) == ('D', 'A'):
end = i + 2
return start, end # exit early
a_start, a_end = find_markers(listA)
b_start, b_end = find_markers(listB)
listB[b_start:b_end] = listA[a_start:a_end]
listA[a_start:a_end] = []
字符串,可以帮助解决此类问题:
#conversion L -> S
strA, strB = [ ''.join(list) for list in [listA,listB] ]
# split
import re
A1,A2,A3 = re.split('BC|DA',strA)
B1,B2,B3 = re.split('BC|DA',strB)
# conversion S -> L
listA = list( A1 + A3 )
listB = list( B1 + 'BC' + A2 + 'DA' + B3 )
并清楚地显示您正在执行的操作。字符串,有助于解决此类问题:
#conversion L -> S
strA, strB = [ ''.join(list) for list in [listA,listB] ]
# split
import re
A1,A2,A3 = re.split('BC|DA',strA)
B1,B2,B3 = re.split('BC|DA',strB)
# conversion S -> L
listA = list( A1 + A3 )
listB = list( B1 + 'BC' + A2 + 'DA' + B3 )
并清楚地显示您正在做的事情。那么您是如何定义要替换的索引的?通过搜索成对的
'B',C'
和'D',A'
?那么您是如何定义要替换的索引的呢?通过搜索成对的'B',C'
和'D',A'
?