Я очень новичок в Python, и у меня есть вопрос.
У меня есть Список, который выглядит так:
List = ["B-Guild","I-Guild","I-Guild","L-Guild","B-Gene","L-Gene","U-Car"]
Все слова с B- (I) -L принадлежат друг другу, и я хочу использовать функцию, чтобы показать это.
def combine(x):
foo = []
regexp_B = ("B-" + r'.*')
regexp_I = ("I-" + r'.*')
regexp_L = ("L-" + r'.*')
regexp_U = ("U-" + r'.*')
for i in range(0,len(x),1):
if re.match(regexp_B, x[i]):
print("Found B")
foo.append[i+x[i]]
if re.match(regexp_I, x[i+1]):
print("Found I")
foo.append[i+1+x[i+1]]
if re.match(regexp_I, x[i+1]):
print("Found I")
foo.append[i+1+x[i+1]]
else:
print("Found L")
foo.append[i+1+x[i+1]]
else:
print("Found L")
foo.append[i1+x[i1]]
elif re.match(regexp_L, x[i]):
print("L")
foo.append[i1+x[i1]]
elif re.match(regexp_U, x[i]):
print("Found U")
foo.append[i1+x[i1]]
return foo
List_New = combine(List)
Желаемый результат:
foo = ["0B-Guild","0I-Guild","0I-Guild","OL-Guild","1B-Gene","1L-Gene","2U-Car"]
Редактировать:
Результат следует этой логике: каждый раз, когда появляется префикс "B-"
, последующие слова являются частью одной "темы", пока не появится префикс "L-"
. Эти слова должны были иметь такое же число перед ними, чтобы их можно было сгруппировать для дальнейших функций. "U-"
префиксы не следуют этой логике и просто нуждаются в количестве перед ними, чтобы отличить их от других слов. Подумайте об этом как о Counter, который группирует это слово в кластер.
def combine(some_list):
current_group = 0 # starts with 0
g_size = 0 # current group size
for elem in some_list:
g_size += 1
if elem.startswith('U-') and g_size > 1:
g_size = 1
current_group += 1
yield '{}{}'.format(current_group, elem)
if elem.startswith(('L-', 'U-')): # each L- or U- also finishes a group
g_size = 0
current_group += 1
>>> List = ["B-Guild","I-Guild","I-Guild","L-Guild","B-Gene","L-Gene","U-Car"]
>>> print(list(combine(List)))
>>> List = ["B-Guild","I-Guild","I-Guild","L-Guild","B-Guild","L-Guild","U-Guild"]
>>> print(list(combine(List)))
List = ["B-Guild","I-Guild","I-Guild","L-Guild","B-Guild","L-Guild","U-Guild"]
?['0B-Guild', '0I-Guild', '0I-Guild', '0L-Guild', '0B-Guild', '0L-Guild', '0U-Guild']
поскольку оно группируется по каждому элементу после-
на каждом элементе, так что это все в одной группе