Поиск строк в списке с помощью Loop Return Order

1

Я очень новичок в 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, который группирует это слово в кластер.

Теги:
list
loops

1 ответ

2
Лучший ответ
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)))
  • 0
    Отлично! Это также работает, если список выглядит следующим образом: List = ["B-Guild","I-Guild","I-Guild","L-Guild","B-Guild","L-Guild","U-Guild"] ?
  • 1
    Я полагаю, что вы можете попробовать сами на этом этапе, но это будет работать нормально, он вернет ['0B-Guild', '0I-Guild', '0I-Guild', '0L-Guild', '0B-Guild', '0L-Guild', '0U-Guild'] поскольку оно группируется по каждому элементу после - на каждом элементе, так что это все в одной группе
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню