Also im Grunde habe ich einen string:in Python bestimmte Teile einer Zeichenfolge ändern
string_1 = '(((A,B)123,C)456,(D,E)789)135'
einen phylogenetischen Baum mit Bootstrap-Wert enthält, wird eingeklammerten Notation (nicht wirklich wichtig für die Frage , aber falls jemand sich wunderte). Diese Beispielstruktur enthält vier Beziehungen mit vier Bootstrap-Werten (die Zahlen, die jeder schließenden Klammer folgen). Ich habe jede dieser Beziehungen in einer Liste von Listen:
list_1 = [['(A,B)', 321], ['((A,B),C)', 654],
['(D,E)', 987], ['(((A,B),C),(D,E))', 531]]
jeweils eine Beziehung und ihre aktualisierten Bootstrap-Wert enthält. Alles, was ich tun müssen, um eine endgültige Zeichenfolge zu erstellen:
final = '(((A,B)321,C)654,(D,E)987)531'
wo alle Bootstrap-Werte mit den Werten in list_1 aktualisiert werden. Ich habe eine Funktion Bootstrap-Werte zu entfernen:
import re
def remove_bootstrap(string):
matches = re.split(r'(?<=\))\d+\.*\d*', string)
matches = ''.join(matches)
return matches
und Code Beziehungen zu isolieren:
list_of_bipart_relationships = []
for bipart_file in list_bipart_files:
open_file = open(bipart_file)
read_file = open_file.read()
length = len(read_file)
for index in range(1, length):
if read_file[index] == '(':
parenthesis_count = 1
for sub_index in range(index + 1, length):
if read_file[sub_index] == '(':
parenthesis_count += 1
if read_file[sub_index] == ')':
parenthesis_count -= 1
if parenthesis_count == 0:
bad_relationship = read_file[index:sub_index + 1]
relationship_without_values = remove_length(bad_relationship)
bootstrap_value = extract(sub_index, length, read_file)
pair = []
pair.append(bootstrap_value)
pair.append(relationship_without_values)
list_of_bipart_relationships.insert(0, pair)
break
und ich bin völlig ratlos. Ich kann nicht herausfinden, wie das Programm eine größere Beziehung erkennt, sobald der Bootstrap-Wert einer verschachtelten Beziehung aktualisiert wird. Jede Hilfe würde sehr geschätzt werden!