Python 按给定顺序包含给定元素集的列表
我在编写代码时遇到困难,无法在列表中查找元素Python 按给定顺序包含给定元素集的列表,python,list,Python,List,我在编写代码时遇到困难,无法在列表中查找元素 我需要编写一个程序,如果列表中包含任意顺序的数字1、2、3(全部),则打印“是”,否则打印“否” [10, 2, 4, 15, 3, 6, 1] # YES [1, 17, 2, 45] # NO (because number 3 is missing) [45, 1, 5, 2, 77, 3] # YES [45, 1, 3, 77, 2] # NO (incorrect order)
- 我需要编写一个程序,如果列表中包含任意顺序的数字1、2、3(全部),则打印“是”,否则打印“否”
[10, 2, 4, 15, 3, 6, 1] # YES [1, 17, 2, 45] # NO (because number 3 is missing)
[45, 1, 5, 2, 77, 3] # YES [45, 1, 3, 77, 2] # NO (incorrect order)
- 此外,我需要修改程序以打印“是”,如果它包含按列出顺序出现的所有数字1、2、3(但不一定是连续的),否则打印“否”
[10, 2, 4, 15, 3, 6, 1] # YES [1, 17, 2, 45] # NO (because number 3 is missing)
显然,如果1、2、3中的一个缺失,程序也应该打印“否”。此任务的棘手部分是1、2、3多次出现的情况。对于 实例如果[45, 1, 5, 2, 77, 3] # YES [45, 1, 3, 77, 2] # NO (incorrect order)
,程序应打印“是”,因为 1、2、3的出现顺序是否正确,而“否”是否正确 为[3,2,1,2,3]
打印,因为没有此类事件[3,3,2,2,1,2]
n=int(input("Please enter the list length "))
A=[]
for i in range (0,n):
print("Entering element ",i)
CurEl=int(input("Please enter the element "))
A.append(CurEl)
print(A)
for i in range (0,n):
if (i==1) or (i==2)or (i==3):
print("YES")
else:
print("NO")
Output:
Please enter the list length 5
('Entering element ', 0)
Please enter the element 1
('Entering element ', 1)
Please enter the element 2
('Entering element ', 2)
Please enter the element 3
('Entering element ', 3)
Please enter the element 4
('Entering element ', 4)
Please enter the element 5
[1, 2, 3, 4, 5]
NO
YES
YES
YES
NO
注1:我们正在制作一份清单,以检查1,2,3是否符合要求。当你去买杂货时,把它当作一张便条
注2:我们在中使用来检查一个对象是否在列表中。例如,这里我们在我们创建的a
列表中循环,可以认为每个都在a中,如果每个都在列表到检查中,那么该条件通过并执行if语句中的内容
注3:我们正在从列表中删除找到并匹配的项目,因为我们已经找到了它,所以不必再次检查remove()
函数接受一个参数,并从您提供的列表中删除该项
注4:检查我们的列表是否为空,如果为空,我们知道我们已找到列表中的所有项目,这意味着它已通过
注5:break
中断for循环,而out不需要完成for循环。既然我们找到了我们所需要的一切,我们就不需要再检查更多的匹配了
注6:for循环可以有一个else
代码块。它们可以被认为是if-else
块,但在for循环中,else
代码块将在for循环完成后运行一次。请注意,如果将从for循环中断开,则不会运行else
。这是一个巧妙的技巧,因为如果我们找到了需要查找的所有内容,我们就打破了for循环,“否则”我们没有找到我们要查找的内容,而for循环完成意味着我们浏览了列表a
注7:列表中有一个计数器检查,这样我们就可以按顺序检查列表中的内容
注8:variable+=int
基本上是variable=variable+1
一种更简洁的递增计数器的方法。如果我们的计数器是3,我们检查了我们的列表,所以我们知道它是有序的。由于我们一次按顺序查看一个
列表,并且我们只在匹配某个内容时增加计数器,因此我们知道它是否符合顺序。似乎您知道如何通过索引访问列表,这是一种方法
我知道还有很多其他的方法是更好的解决方案,但既然你说你是新手,想学习,我觉得这是最好的方法。你会学到一些技巧,而且不会太复杂,因为所有的东西都是用通俗易懂的英语逻辑布局的
至于为什么你的代码不起作用,你不是在迭代(浏览你的列表),你只是在检查从0到列表大小的范围,基本上,0,1,2,3,4,5,…,n
。要遍历一个列表,您必须对列表名称中的临时变量使用,
参见我的示例 第一个很简单:
A = [10, 2, 4, 15, 3, 6, 1]
if (1 in A) and (2 in A) and (3 in A):
print("YES")
else:
print("NO")
第二个有点棘手:
def locate(list_var):
i = 0
for l in list_var:
if l == 1 and i == 0:
i = 1
elif l == 2 and i == 1:
i = 2
elif l == 3 and i == 2:
return "YES"
return "NO"
print(locate([45, 1, 5, 2, 77, 3]))
print(locate([45, 1, 3, 77, 2]))
你不是在访问你的数组,只是在使用索引比较。为了澄清@thecoder所说的,你把这个列表A
,然后再不使用它。另外,把print
放在一个循环中意味着它可能会运行几次,但你只想打印一次,因此,不要将打印内容放在循环中。非常感谢,现在就有意义了!:)但是我现在需要对代码进行一点改进,我需要编写一个程序,如果a包含所有的数字1,则打印“是”;2.3按顺序连续出现,否则为“否”。换句话说,我需要检查是否有索引I;i+1;i+2使得A[i]=1、A[i+1]=2和A[i+2]=3。这个条件的实现是什么?看看我是怎么做的,稍微改变一下,你可以稍微改变一下逻辑流。