python - 使用循环返回顺序在列表中搜索字符串

标签 python list loops

我对 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-” 前缀不遵循该逻辑,只需在其前面添加一个数字即可将其与其他单词区分开来。将其视为将这些单词分组为一个簇的计数器。

最佳答案

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)))

关于python - 使用循环返回顺序在列表中搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956456/

相关文章:

java - 正则表达式 - 从字符串中提取数字。数字应该是我输入的前 5 位数字

python - 如何在 Jenkins UI 中执行本地 python 脚本

python - 另一个合并列表列表,但最 pythonic 方式

javascript - 尝试使用数组和循环重写 JS 测验——正确答案在哪里?

c++ - while 循环时的问题

python - "from ... import ..."是什么意思?

python - 根据另一列的下一个值更改 Pandas 日期时间列

python - 如何在 Python 中打乱多维列表

c# - TypeDescriptor 和子元素

javascript - Javascript数组中的魔术逗号