python判断是否连续数字组合_检查具有特定条件的连续数字 – Python

这篇博客讨论了如何编写一个Python函数来检查列表中是否存在连续数字,其中字母'a'可以视为任何整数的替代。文章提供了一个不完全工作的函数示例,并展示了一个改进的解决方案,该解决方案首先检查非'a'元素的数量,然后通过替换'a'来创建一个连续的数字列表,并验证其连续性。最后,给出了几个测试用例来验证函数的正确性。
摘要由CSDN通过智能技术生成

我正在尝试编写一个函数来测试列表是否具有连续数字但是具有非常奇怪的捕获.问题是“a”可以用作任何整数的替代,但列表中至少有2个元素必须是数字.元素> = 1(如果不是“a”)并且是整数.可以假设输入是这种形式,因此不需要检查它.

我是编码的新手,所以我实际上更喜欢在一个衬垫上进行循环,因为我还不熟悉一个衬垫的使用.

例如:

>>>check_consecutive([1,2,"a","a",5,6,7,"a"])

True

>>>check_consecutive(["a","a","a","a",9,10])

True

>>>check_consecutive(["a","a","a","a",5])

False #Need at least 2 elements to be numbers

>>>check_consecutive([3,4,5,"a",6,7])

False

>>>check_consecutive(["a","a","a","a","a","a",2,3])

False

我试图做的:

def check_consecutive(lst):

count = 0

for i in range(len(lst)-1):

if lst[i] == "a" or lst[i+1] == "a":

count +=1

elif lst[i+1] - lst[i] == 1:

count +=1

if count == len(lst)-1:

return True

return False

这不起作用,因为它没有考虑“a”的值.我不知道该怎么做.在此先感谢您的帮助.

最佳答案 请尝试以下方法.它适用于所有测试用例,并且我将单行保持在最低限度:

def check_consecutive(lst):

# Check for the number of non-"a" entries in the list:

if len([x for x in lst if x != "a"]) < 2:

return False

# Get the first non-a value (ASSUMPTION: this is a number)

first_number = next((e for e in lst if e != "a"), None)

# Find the index of the first number

first_index = lst.index(first_number)

# Find the difference between the first number and its index

diff = first_number - first_index

# Based on the final example - false if negative values would be used:

if diff < 0:

return False

# Create a new list - replace a's with their index plus the difference we found

# If the list is consecutive, this difference will be consistent for all values

all_numbers = []

for i, x in enumerate(lst):

if x == "a":

all_numbers.append(i + diff)

else:

all_numbers.append(x)

# Check if the values are now consecutive or not!

if all(all_numbers[i+1] == all_numbers[i] + 1 for i in range(len(all_numbers) - 1)):

return True

else:

return False

print check_consecutive([1,2,"a","a",5,6,7,"a"])

#True

print check_consecutive(["a","a","a","a",9,10])

#True

print check_consecutive(["a","a","a","a",5])

#False #Need at least 2 elements to be numbers

print check_consecutive([3,4,5,"a",6,7])

#False

print check_consecutive(["a","a","a","a","a","a",2,3])

#False

如果您想了解一些单行程序的工作方式,可以将功能略微降低,如下所示:

def check_consecutive(lst):

# Check for the number of non-"a" entries in the list:

if len([x for x in lst if x != "a"]) < 2:

return False

# Get the first non-a value (ASSUMPTION: this is a number)

first_number = next((e for e in lst if e != "a"), None)

# Find the index of the first number

first_index = lst.index(first_number)

# Find the difference between the first number and its index

diff = first_number - first_index

# Based on the final example - false if negative values would be used:

if diff < 0:

return False

if all(x == "a" or x == i + diff for i, x in enumerate(lst)):

return True

else:

return False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值