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)
    
    [45, 1, 5, 2, 77, 3]      # YES
    [45, 1, 3, 77, 2]         # NO (incorrect order)
    
    显然,如果1、2、3中的一个缺失,程序也应该打印“否”。此任务的棘手部分是1、2、3多次出现的情况。对于 实例如果
    [3,2,1,2,3]
    ,程序应打印“是”,因为 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。这个条件的实现是什么?看看我是怎么做的,稍微改变一下,你可以稍微改变一下逻辑流。