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

时间:2019-05-02 13:22:39

标签: python python-3.x string list sorting

给出一个字符串列表,例如mystr= ["State0", "State1", "State2", "State5", "State8"]

我需要找到缺失的国家(在"State3", "State4", "State6", "State7")。有可能找到它吗?

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

4 个答案:

答案 0 :(得分:3)

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

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']

答案 1 :(得分:1)

使用列表推导和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”)也可以使用,即使原始列表未排序也是如此。

答案 2 :(得分:1)

我不确定您在问什么。我认为这就是您的期望。

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

答案 3 :(得分:1)

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

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']