如何在python中检查字符串形式的连续整数?
我正在制作一个函数是连续的,如果由连字符(-)分隔的整数字符串是连续的,则返回True,否则返回False 例如,如果是连续的(“10-9-8-7-6”)和是连续的(“1-2-3-4-5”)是真的,但是连续的(“1-2-3-5-4”)返回假的 我不知道如何处理这个问题。到目前为止,我尝试拼接字符串,并尝试检查字符串是否是一个数字,解析它,然后检查连续性,但没有任何效果 我试过这样做如何在python中检查字符串形式的连续整数?,python,string,integer,Python,String,Integer,我正在制作一个函数是连续的,如果由连字符(-)分隔的整数字符串是连续的,则返回True,否则返回False 例如,如果是连续的(“10-9-8-7-6”)和是连续的(“1-2-3-4-5”)是真的,但是连续的(“1-2-3-5-4”)返回假的 我不知道如何处理这个问题。到目前为止,我尝试拼接字符串,并尝试检查字符串是否是一个数字,解析它,然后检查连续性,但没有任何效果 我试过这样做 def is_consecutive(x): ls = list(x) for i in ls:
def is_consecutive(x):
ls = list(x)
for i in ls:
if i in ls == "-":
print(ls)
你可以做:
def is_consecutive(x):
ls = list(map(int, x.split('-')))
diffs = set(x-y for x, y in zip(ls, ls[1:]))
return len(diffs) == 1 and diffs.pop() in (1, -1)
>>> is_consecutive("1-2-3-4-5-6")
True
>>> is_consecutive("1-2-3-4-6-5")
False
>>> is_consecutive("3-2-1")
True
第一行将字符串转换为整数列表:1.关于连字符
2.使用 第二行收集邻居的所有差异。
1.将列表自身偏移1,以获得一对相邻对象的iterable值
2.计算每一对的差值
3.将其转换为(仅保留不同的VAULE) 第三行检查只有一个这样的差异,它是
1
还是-1
1.使用
2.检查它的一个元素一种简单的方法是将输入列表与从列表的第一项开始到最后一项结束的
范围
对象生成的列表进行比较,同时考虑基于最后一项是大于还是小于第一项的顺序方向:
def is_consecutive(x):
lst = list(map(int, x.split('-')))
direction = lst[-1] > lst[0] or -1
return lst == list(range(lst[0], lst[-1] + direction, direction))
非常感谢你!!!你能给我解释一下你在第二行使用的代码吗?这是我第一次看到它添加了更多的解释和链接