给出一个字符串列表,例如mystr= ["State0", "State1", "State2", "State5", "State8"]
。
我需要找到缺失的国家(在"State3", "State4", "State6", "State7"
)。有可能找到它吗?
所需的输出:mylist = ["State3", "State4", "State6", "State7"]
答案 0 :(得分:3)
假设列表中的最高数字可能未知,一种方法是提取每个字符串中的数字部分,将set.difference
与range
取到最大值,然后创建一个新的数字。使用列表理解列表:
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']