Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 浏览列表,每当出现特定类别的编号时,创建其他类别中最近编号的列表_Python_For Loop - Fatal编程技术网

Python 浏览列表,每当出现特定类别的编号时,创建其他类别中最近编号的列表

Python 浏览列表,每当出现特定类别的编号时,创建其他类别中最近编号的列表,python,for-loop,Python,For Loop,假设我有一个随机数列表 随机列表=[9, 8, 18, 1, 17, 3, 13, 4, 13, 1, 9, 10, 7, 13, 3, 9, 13, 10, 18, 10, 19, 3, 14, 14, 19, 4, 20, 17, 8, 17, 3, 12, 8, 12, 1, 2, 15, 13, 2, 8, 18, 10, 14, 11, 17, 11, 2, 7, 4, 7, 5, 5, 18, 7, 11, 13, 20, 9, 2, 14, 19, 1, 16, 10, 16, 1

假设我有一个随机数列表

随机列表=[9, 8, 18, 1, 17, 3, 13, 4, 13, 1, 9, 10, 7, 13, 3, 9, 13, 10, 18, 10, 19, 3, 14, 14, 19, 4, 20, 17, 8, 17, 3, 12, 8, 12, 1, 2, 15, 13, 2, 8, 18, 10, 14, 11, 17, 11, 2, 7, 4, 7, 5, 5, 18, 7, 11, 13, 20, 9, 2, 14, 19, 1, 16, 10, 16, 19, 13, 19, 11, 17, 8, 2, 10, 16, 5, 14, 7, 11, 17, 9, 9, 6, 12, 6, 12, 4, 14, 10, 2, 6, 9, 1, 14, 4, 14, 13, 18, 13,6、8]

有三类数字: 可被二整除的数(2,4,6,8,10,12,14,16,18,20) 除两个(3,7,11,13,17,19)外的素数 其余(1,5,9,15)

现在我想做的是: 我将浏览该列表,每当出现大量的rest类别时,我都希望创建一个类似[%2,prime]的列表,而元素是列表中最近出现的元素。目标是创建一个包含两个元素的列表。我希望清楚我试图做什么。以下是我的代码:

randomlist = [9, 8, 18, 1, 17, 3, 13, 4, 13, 1, 9, 10, 7, 13, 3, 9, 13, 10, 18, 10, 19, 3, 14, 14, 19, 4, 20, 17, 8, 17, 3, 12, 8, 12, 1, 2, 15, 13, 2, 8, 18, 10, 14, 11, 17, 11, 2, 7, 4, 7, 5, 5, 18, 7, 11, 13, 20, 9, 2, 14, 19, 1, 16, 10, 16, 19, 13, 19, 11, 17, 8, 2, 10, 16, 5, 14, 7, 11, 17, 9, 9, 6, 12, 6, 12, 4, 14, 10, 2, 6, 9, 1, 14, 4, 14, 13, 18, 13, 6, 8]


def check_prime(x):

    for i in range(2, x):
        if (x % i) == 0:
            return False
    else:
        return True

def check_number(x):

    if x%2 == 0:
        return "zweier"

    elif check_prime(x) == True:
        return "prim"

    else:
        return "rest"

final_list = []
partial_list = [0,0]

for x in randomlist:

    if check_number(x) =="zweier":
        partial_list[0] = x

    elif check_number(x) == "rest":
        partial_list[1] = x

    else:
        final_list.append(partial_list)

for x in final_list:
    print(x)
输出:

[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
[8, 9]
让我非常困惑的是,如果我在创建最终的_列表成员后立即打印它们,它会显示正确的解决方案:

randomlist = [9, 8, 18, 1, 17, 3, 13, 4, 13, 1, 9, 10, 7, 13, 3, 9, 13, 10, 18, 10, 19, 3, 14, 14, 19, 4, 20, 17, 8, 17, 3, 12, 8, 12, 1, 2, 15, 13, 2, 8, 18, 10, 14, 11, 17, 11, 2, 7, 4, 7, 5, 5, 18, 7, 11, 13, 20, 9, 2, 14, 19, 1, 16, 10, 16, 19, 13, 19, 11, 17, 8, 2, 10, 16, 5, 14, 7, 11, 17, 9, 9, 6, 12, 6, 12, 4, 14, 10, 2, 6, 9, 1, 14, 4, 14, 13, 18, 13, 6, 8]


def check_prime(x):
    for i in range(2, x):
        if (x % i) == 0:
            return False
    else:
        return True

def check_number(x):

    if x%2 == 0:
        return "zweier"

    elif check_prime(x) == True:
        return "prim"

    else:
        return "rest"

final_list = []
partial_list = [0,0]

for x in randomlist:

    if check_number(x) =="zweier":
        partial_list[0] = x

    elif check_number(x) == "rest":
        partial_list[1] = x

    else:
        final_list.append(partial_list)
        print(final_list[-1])
输出:

[18, 9]
[18, 9]
[18, 9]
[18, 9]
[4, 9]
[4, 9]
[10, 9]
[10, 9]
[10, 9]
[10, 9]
[10, 9]
[10, 9]
[14, 9]
[20, 9]
[8, 9]
[8, 9]
[12, 9]
[2, 15]
[14, 15]
[14, 15]
[14, 15]
[2, 15]
[4, 15]
[4, 15]
[4, 15]
[18, 15]
[18, 15]
[18, 15]
[14, 9]
[14, 9]
[16, 9]
[16, 9]
[16, 9]
[16, 9]
[16, 9]
[16, 9]
[14, 9]
[14, 9]
[14, 9]
[6, 9]
[14, 9]
[18, 9]

所以基本想法似乎没问题。我做了很多尝试,但我就是找不到我做错了什么。非常感谢您的帮助!

原因是当您迭代随机列表中的项目并将部分列表附加到最终列表时,您附加的是对同一对象的引用(部分列表),但不是包含的值

如果将append语句更改为:

final_list.append(partial_list.copy())
每次都会附加一份partial_列表的副本,您的代码最终将打印正确的结果

因此,您的代码是:

def check_prime(x):
对于范围(2,x)内的i:
如果(x%i)==0:
返回错误
其他:
返回真值
def检查编号(x):
如果x%2==0:
返回“zweier”
elif check_prime(x)=真:
返回“prim”
其他:
返回“休息”
最终清单=[]
部分_列表=[0,0]
对于随机列表中的x:
如果检查编号(x)=“zweier”:
部分_列表[0]=x
elif校验号(x)=“剩余”:
部分_列表[1]=x
其他:
final_list.append(partial_list.copy())
对于最终清单中的x:
打印(x)

这将为您提供所需的结果。请参阅,其中解释了发生的情况

randomlist = [9, 8, 18, 1, 17, 3, 13, 4, 13, 1, 9, 10, 7, 13, 3, 9, 13, 10, 18, 10, 19, 3, 14, 14, 19, 4, 20, 17, 8, 17, 3, 12, 8, 12, 1, 2, 15, 13, 2, 8, 18, 10, 14, 11, 17, 11, 2, 7, 4, 7, 5, 5, 18, 7, 11, 13, 20, 9, 2, 14, 19, 1, 16, 10, 16, 19, 13, 19, 11, 17, 8, 2, 10, 16, 5, 14, 7, 11, 17, 9, 9, 6, 12, 6, 12, 4, 14, 10, 2, 6, 9, 1, 14, 4, 14, 13, 18, 13, 6, 8]


def check_prime(x):
    for i in range(2, x):
        if (x % i) == 0:
            return False
    else:
        return True

def check_number(x):
    if x%2 == 0:
        return "zweier"
    elif check_prime(x) == True:
        return "prim"
    else:
        return "rest"

final_list = []
partial_list = [0,0]

for x in randomlist:
    if check_number(x) =="zweier":
        partial_list[0] = x
    elif check_number(x) == "rest":
        partial_list[1] = x
    else:
        final_list.append(partial_list.copy())

for x in final_list:
    print(x)