Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将指定元素之间的列表元素替换为其他元素_Python - Fatal编程技术网

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'