创建一个函数以从每个子列表包含 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+$"
,它基本上匹配字符串末尾的数字模式。如果识别出这样的模式,那么我们将其替换为空。
我有一个很长的列表,其中包含很多存在 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+$"
,它基本上匹配字符串末尾的数字模式。如果识别出这样的模式,那么我们将其替换为空。