创建一个函数以从每个子列表包含 2 个值的列表中删除或替换最后一个数字

create a function to remove or replace last numbers from a list containing 2 values per sublist

我有一个很长的列表,其中包含很多存在 2 个“值”的子列表, 例如

test=[["AAAGG1","AAAAA22"],["GGGGA1","AAGGA"],["GGGGG23","GGAGA6"]]

我想要的是替换或删除最后一位数字。 因此我尝试使用一个很长的函数:

def remove_numbers(index,newlist):
for com in index:
    for dup in com:
        if "1" in dup:
            newlist.append(dup.replace("1",""))
        elif "2" in dup:
            newlist.append(dup.replace("2",""))
        elif "3" in dup:
            newlist.append(dup.replace("3",""))
        elif "4" in dup:
            newlist.append(dup.replace("4",""))
        elif "5" in dup:
            newlist.append(dup.replace("5",""))
        elif "6" in dup:
            newlist.append(dup.replace("6",""))
        elif "7" in dup:
            newlist.append(dup.replace("7",""))
        elif "8" in dup:
            newlist.append(dup.replace("8",""))
        elif "9" in dup:
            newlist.append(dup.replace("9",""))
        else:
            newlist.append(dup)

我创建了一个空列表并调用了函数

emptytest=[]
testfunction=remove_numbers(test,emptytest)

当我调出空测试时,我的输出如下

['AAAGG', 'AAAAA', 'GGGGA', 'AAGGA', 'GGGGG3', 'GGAGA']

问题是现在是单表,当最后有两个数字不一样的时候,不都是removed/replaced。我需要子列表保持完整。

有人知道解决这个问题的方法吗?

抱歉,如果这是一个简单的问题,因为我还没有 python 的经验,但我无法在网络或现有论坛上找到合适的解决方案。

您需要的是使用正则表达式来替换数字,而不是手动识别所有内容。整个事情可以通过下面的两行来实现。

import re
processed = [[re.sub(r"\d+$","",n) for n in t] for t in test]
print(processed)

给出结果

[['AAAGG', 'AAAAA'], ['GGGGA', 'AAGGA'], ['GGGGG', 'GGAGA']]

这里我们使用了一个正则表达式 "\d+$",它基本上匹配字符串末尾的数字模式。如果识别出这样的模式,那么我们将其替换为空。