基于另一个列表中的模式匹配创建新列表

2024-10-01 07:43:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,我想检查模式,如果模式匹配,将两个元素组合在一起,并创建一个新列表

例如,这是我的列表:

string_ = ["aBc", "ab","12abc55", "ABAB", "125"]

如何-如果列表中的第二项是字符串(里面没有数字),而列表中的第三项是数字和字符的组合,那么我想将它们加在一起,中间留一个空格。我的最终输出应该是:

["aBc", "ab 12abc55", "ABAB", "125"]

我尝试了以下方法:

    def hasNumbers(inputString):
        return bool(re.search(r'\d', inputString))

    data = []
    for i in range (0,len(string_)):


            if string_[1].isalnum() and hasNumbers(string_[2]):
                data.append(string_[1]+ " "+ string_[2])
            else:
                data.append(string_[i])

这不会给出预期的输出


Tags: 字符串元素列表datastringab模式数字
3条回答

如果要使用循环,则需要使用i读取列表的值:

import re
string_ = ["aBc", "ab", "12abc55", "ABAB", "125", "aBc", "ab", "12abc55", "ABAB", "125"]

def hasNumbers(inputString):
    return bool(re.search(r'\d', inputString))

for i in range (0, len(string_)-1):
    if string_[i].isalnum() and hasNumbers(string_[i+1]):
        data.append(string_[i]+ " "+ string_[i+1])
    else:
        data.append(string_[i])
print(data)

输出:

['aBc', 'ab 12abc55', '12abc55', 'ABAB 125', '125', 'aBc', 'ab 12abc55', '12abc55', 'ABAB 125']

我将复制整个列表,并仅在条件满足时更新它
对于第二和第三个要素:

import re

string_ = ["aBc", "ab", "12abc55", "ABAB", "125"]


def hasNumbers(inputString):
    return bool(re.search(r'\d', inputString))


data = string_.copy()
if data[1].isalnum() and hasNumbers(data[2]):
    data[1] += f' {data.pop(2)}'

print(data)
['aBc', 'ab 12abc55', 'ABAB', '125']

使用for循环迭代列表在这里没有意义,因为您想要执行的操作只需执行一次。所以你不需要一个循环。您可以使用以下内容替换for循环以实现预期结果:

a,b,c,d = string_
if b.isalnum() and hasNumbers(c):
        data = [a, b + ' ' +  c, d]
else:
    data = string_

相关问题 更多 >