如何在python中通过列表理解查找字符串中缺少的数字

如何在python中通过列表理解查找字符串中缺少的数字,python,Python,这个问题是在面试中被问及如何将字符串转换成整数 str='1,3,5,8,...,12,15,17,...,21,22' 目标是查找字符串中缺少的数字 输出应该是如下所示的字符串 '1,2,3,8,9,10,11,12,15,17,18,19,20,21,11' 我用了很长的代码 s='1,3,5,8,...,12,15,17,...,21,22' s_list = s.split(',') new_list=[] t=0 for ch in s_list: if ch.isdigi

这个问题是在面试中被问及如何将字符串转换成整数

str='1,3,5,8,...,12,15,17,...,21,22'
目标是查找字符串中缺少的数字 输出应该是如下所示的字符串

'1,2,3,8,9,10,11,12,15,17,18,19,20,21,11'
我用了很长的代码

s='1,3,5,8,...,12,15,17,...,21,22'
s_list = s.split(',')
new_list=[]
t=0
for ch in s_list:
    if ch.isdigit():
        t=int(ch)
        new_list.append(ch)
    else:
        for i in range(1,len(ch)+1):
            t+=1
            new_list.append(str(t))
print ",".join(new_list)
但是 需要优化的解决方案,使用列表理解

str = '1,2,3'
int_list = [int(x) for x in str.split(',')]
通过首先拆分
str
并通过
int(x)
将每个单独的项目/片段转换为
int
,这将为您提供一个整数列表 我想这是不言自明的,但是如果你有什么疑问,只要在评论部分提问,我会尽力解释。祝你过得愉快

所使用的方法称为

编辑(在整数列表中查找缺少的值): 因为这个答案可能不适用,而且这个问题暂时搁置,如果有人发现这个问题,我会更深入地讨论这个问题。

如果要查找新创建的基于
int
列表中缺少的数字,可以执行以下操作:

str = '1,2,5'
int_list = [int(x) for x in str.split(',')]

missing_values = []
for i in range(0, max(int_list)):
    if not i in int_list:
        missing_values.append(i)

print('Missing values are:', missing_values)
int_list = int_list + missing_values
int_list.sort()
可能是或者不是你想要的,但我有预感这就是你真正想要的

编辑2(合并两个列表并将整数列表转换为字符串): 通过下面的评论部分,在这张照片上进一步旋转兔子洞。 假设您希望将缺少的值插入到原始字符串中,则可以执行以下操作:

str = '1,2,5'
int_list = [int(x) for x in str.split(',')]

missing_values = []
for i in range(0, max(int_list)):
    if not i in int_list:
        missing_values.append(i)

print('Missing values are:', missing_values)
int_list = int_list + missing_values
int_list.sort()
最后,您可能希望将其转换回字符串?
别紧张

str = ','.join(int_list)

那么你的解决方案是什么,你能分享这些代码吗?而且输出没有多大意义;
5
去了哪里,
2
从哪里来,最后的
11
是什么?预期输出中的额外引号有什么作用?如果您执行
str='、'+str
并定义
result=[]
,您可以执行
[result.extend([int(element[1])If element[1].isnumeric()else range(int(element[0])列表中元素的范围(int(element[0])+1,int(element[2]))[:-1]]
。当然,这是不可读的,没有一个头脑清醒的人会这样做。事实上,我不认为这是OP所要求的。坦率地说,我一点也不确定OP想要什么。@MartijnPieters只是注意到标题变了,问题变得完全不同。也许我应该删除我的答案吗?我认为OP希望
被适合这个差距的数字所取代。@Matthias有趣的是,你可以将OP的问题演变成一个永无止境的答案,但只要评论在这里增加,我就会继续添加,因为我不想被投票遗忘。@Torxed:除非在前5分钟内编辑,否则问题不会改变。只更新了标题。