Python 识别(可变长度的)必须以连续顺序出现的数字块
问题陈述: 当且仅当数组具有以下结构时,才接受该数组:Python 识别(可变长度的)必须以连续顺序出现的数字块,python,list,indexing,pattern-matching,Python,List,Indexing,Pattern Matching,问题陈述: 当且仅当数组具有以下结构时,才接受该数组: 第一个a1元素等于1 下一个a2元素等于2 下一个a3元素等于3 下一个a4元素等于4 下一个a5元素等于5 下一个a6元素等于6 下一个a7元素等于7 其中: a(i)可以是任何非零正整数 数组中没有其他元素 尽管这个问题的算法似乎很容易实现,但我在代码方面遇到了一些困难。这是我写的 print("Enter list: ") arr = [int(x) for x in input().split()] print(arr) i
- 第一个a1元素等于1
- 下一个a2元素等于2
- 下一个a3元素等于3
- 下一个a4元素等于4
- 下一个a5元素等于5
- 下一个a6元素等于6
- 下一个a7元素等于7
- a(i)可以是任何非零正整数
- 数组中没有其他元素
print("Enter list: ")
arr = [int(x) for x in input().split()]
print(arr)
i = 0
if arr[0] == 1: # to check whether input starts with a 1.
if arr[i] == 1: #If next number is also 1, then
while arr[i] == 1: #while numbers are equal to 1, increment i
i = i + 1
if arr[i] == 2: #If next number is 2, then
while arr[i] == 2: #same procedure as above ... and so on
i = i + 1
if arr[i] == 3:
while arr[i] == 3:
i = i + 1
if arr[i] == 4:
while arr[i] == 4:
i = i + 1
if arr[i] == 5:
while arr[i] == 5:
i = i + 1
if arr[i] == 6:
while arr[i] == 6:
i = i + 1
if arr[i] == 7:
while arr[i] == 7:
i = i + 1
if arr[-1] == 7: #to check if last number is a 7
print("Accepted")
else:
print("not")
else:
print("not")
else:
print("not")
else:
print("not")
else:
print("not")
else:
print("not")
else:
print("not")
else:
print("not")
else:
print("not")
我似乎得到了某种索引错误,它说:
while arr[i] == 7:
IndexError: list index out of range
我不明白为什么我会遇到这个错误。据我所知,我没有超出列表索引。您可以尝试以下方法:
def is_accepted(arr):
return arr[0] == 1 and all(arr[i] -1 == arr[i-1] or arr[i] == arr[i-1] for i in range(1, len(arr)))
print(is_accepted([1, 2, 3, 4, 5, 6, 7]))
输出:
True
False
True
第二份名单:
s = [1, 2, 3, 4, 5, 5, 4, 3, 5, 6, 7]
print(is_accepted(s))
输出:
True
False
True
最后输入:
s = [1, 1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7]
print(is_accepted(s))
输出:
True
False
True
递归的有趣练习 在下列条件下编写案例:
- 列表为空
- 列表的第一项小于最后一项被检查为短路
- 递归匹配
输入列表:1234567[1,2,3,4,5,5,4,3,5,6,7]True
对于错误的模式也显示True。@SakshiJain当我运行您刚刚发布的列表时,输出为False。它对冗余数字无效。假设根据问题陈述输入字符串s=[1,1,2,2,3,3,3,4,5,6,6,7]
,则该字符串为有效输入。但是程序却不这么说。@SakshiJain那么你是说冗余数字在这个问题上是可以接受的?我认为解决这个问题的方法是添加一个if语句,比如if arr[I]==arr[I-1]或arr[I]==arr[I-1]+1
,而不是你原来的条件。欢迎使用堆栈溢出-很高兴有你。请阅读并帮助将堆栈溢出内容保持在尽可能高的级别,并增加获得适当答案的机会。我不得不说,这看起来像是高度冗余的代码。我很确定你可以用几行文字来简化所有这些。给您一个提示,您希望找到的数字与您希望它在数组中的位置非常接近。Dupe目标的可能重复是针对Java的,但在Python中解决方案并没有那么大的不同。