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

Python 从给定列表中查找缺少的包含int值的字符串,python,python-3.x,string,list,sorting,Python,Python 3.x,String,List,Sorting,给定一个字符串列表,比如mystr=[“State0”、“State1”、“State2”、“State5”、“State8”] 我需要找到缺失的状态(此处“State3”、“State4”、“State6”、“State7”)。有可能找到它吗 所需输出:mylist=[“State3”、“State4”、“State6”、“State7”]列表理解和f字符串足够简单: mystr = ["State0", "State1", "State2", "State5", "State8"] hig

给定一个字符串列表,比如mystr=[“State0”、“State1”、“State2”、“State5”、“State8”]

我需要找到缺失的状态(此处
“State3”、“State4”、“State6”、“State7”
)。有可能找到它吗


所需输出:
mylist=[“State3”、“State4”、“State6”、“State7”]
列表理解和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)
输出:

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

请注意,此解决方案很好且通用,即使原始列表中的最后一个元素(例如“State1024”)以及原始列表未排序,也能正常工作。

我不确定您的问题。我想这就是你所期望的

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

假设列表中的最高数字可能未知,一种方法是提取每个字符串中的数字部分,将
范围为
集合.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']

您可以使用以下解决方案:

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

states = set(lst)    
len_states = len(states)
missing = []
num = 0

while len_states:
    state = f'State{num}'
    if state in states:
        len_states -= 1 
    else:
        missing.append(state)
    num += 1

print(missing)
输出:

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

['State3'、'State4'、'State6'、'State7']

这是非常具体的,如果原始列表中的最后一个状态是例如“State12”,则它将不起作用。“f”在这里代表什么,[f'state{i}表示缺少的i]。在此行抛出错误这是python 3的字符串格式语法,您可以阅读更多关于它的内容,您有什么python版本?@Sharm这是一个f字符串,用于在字符串中插入变量:@yatu,python 3。5@Sharm尝试使用
['State{}'。格式(i)表示缺少的i]