从给定的lis中查找缺少的包含int值的字符串

2024-05-16 06:47:54 发布

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

给定一个字符串列表,比如mystr= ["State0", "State1", "State2", "State5", "State8"]。你知道吗

我需要找到丢失的状态(这里是"State3", "State4", "State6", "State7")。有可能找到它吗?你知道吗

所需输出:mylist = ["State3", "State4", "State6", "State7"]


Tags: 字符串列表状态state1mylistmystrstate2state3
3条回答

列表理解和f字符串足够简单:

mystr = ["State0", "State1", "State2", "State5", "State8"]

highest = max(int(state.split('State')[-1]) for state in mystr)
mylist = [f"State{i}" for i in range(highest) if f"State{i}" not in mystr]

print(mylist)

Output:

['State3', 'State4', 'State6', 'State7']

请注意,这个解决方案很好而且通用,即使原始列表中的最后一个元素(例如“State1024”)以及原始列表没有排序,也可以工作。你知道吗

假设列表中的最高数字可能未知,一种方法是提取每个字符串中的数字部分,将带有set.differencerangeset.difference取到最高值,然后使用列表理解创建一个新列表:

import re
ints = [int(re.search(r'\d+', i).group(0)) for i in mystr]
# [0, 1, 2, 5, 8]
missing = set(range(max(ints))) - set(ints)
# {3, 4, 6, 7}
[f'State{i}' for i in missing]
# ['State3', 'State4', 'State6', 'State7']

我不知道你在问什么。我想这就是你所期望的。你知道吗

mystr= ["State0", "State1", "State2", "State5", "State8"]
print(['State'+str(p) for p in range(8) if 'State'+str(p) not in mystr ])

相关问题 更多 >