Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Python 3.x_Numpy_Multidimensional Array - Fatal编程技术网

Python 数组列表:如何查看一个列表中的数组是否在另一个列表中?

Python 数组列表:如何查看一个列表中的数组是否在另一个列表中?,python,arrays,python-3.x,numpy,multidimensional-array,Python,Arrays,Python 3.x,Numpy,Multidimensional Array,如果我有两个列表,它们都包含多维Numpy数组,那么如何查看一个列表中的数组是否在另一个列表中 如果我有两个列表,两个列表都包含元素,我可以搜索一个列表(逐个元素),以确定它是否在第二个列表中,如下所示: all_numbers = [1,2,3,4,5,6,7,8,9,10] even_numbers = [2,4,6,8,10] for i in all_numbers: if i in even_numbers: print(i,'is an even numbe

如果我有两个列表,它们都包含多维Numpy数组,那么如何查看一个列表中的数组是否在另一个列表中

如果我有两个列表,两个列表都包含元素,我可以搜索一个列表(逐个元素),以确定它是否在第二个列表中,如下所示:

all_numbers = [1,2,3,4,5,6,7,8,9,10]
even_numbers = [2,4,6,8,10]

for i in all_numbers:
    if i in even_numbers:
        print(i,'is an even number.')
    else:
        print(i,'is an odd number.')
输出:

1 is an odd number.
2 is an even number.
3 is an odd number.
4 is an even number.
5 is an odd number.
6 is an even number.
7 is an odd number.
8 is an even number.
9 is an odd number.
10 is an even number.
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
现在,如果我有两个列表,它们都只包含多维数组,为什么我不能使用相同的方法搜索一个列表中的数组是否在另一个列表中?这些数组都是多维的,并且是从数据文件(使用
urllib
numpy
模块)生成的。据我所知,列表中的数组只是元素,所以使用相同的方法应该得到相同的结果;但是,当我尝试执行程序时,会收到以下消息:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
为什么会发生这种情况?显然,使用多维数组并不等同于列表中的简单元素。是否有办法实现我想要的(即,查看一个列表中的数组是否在另一个列表中)


[以下是我的程序示例。我使用多个数据文件,所有数据文件都是多维数组。为了保持程序的通用性,我删除了实际的URL。数据文件按年份组织(1981-1990年),因此这些文件具有相同数量的信息,但闰年除外,闰年有额外一天的数据。我的两个列表是一个包含所有文件,另一个包含闰年的文件。如果需要其他信息,请告诉我。]

import numpy as np
import urllib.request

data1981url = '1981url'
data1981 = np.genfromtxt(data1981url)
data1982url = '1982url'
data1982 = np.genfromtxt(data1982url)
data1983url = '1983url'
data1983 = np.genfromtxt(data1983url)
data1984url = '1984url'
data1984 = np.genfromtxt(data1984url)
data1985url = '1985url'
data1985 = np.genfromtxt(data1985url)
data1986url = '1986url'
data1986 = np.genfromtxt(data1986url)
data1987url = '1987url'
data1987 = np.genfromtxt(data1987url)
data1988url = '1988url'
data1988 = np.genfromtxt(data1988url)
data1989url = '1989url'
data1989 = np.genfromtxt(data1989url)
data1990url = '1990url'
data1990 = np.genfromtxt(data1990url)

years = [data1981, data1982, data1983, data1984, data1985, data1986, data1987, data1988,
data1989, data1990]
leapyears = [data1984, data1988]

years_by_day = []
flux_data = []
for i in years:
    y = i[:,46]
    for k in y:
        flux_data.append(k)
    if i in leapyears: # Where the problem arises.
        x = i[0,0] + np.arange(len(y))/105480
        for j in x:
            years_by_day.append(j)
    else:
        x = i[0,0] + np.arange(len(y))/105120
        for j in x:
            years_by_day.append(j)
输出:

1 is an odd number.
2 is an even number.
3 is an odd number.
4 is an even number.
5 is an odd number.
6 is an even number.
7 is an odd number.
8 is an even number.
9 is an odd number.
10 is an even number.
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

在这种情况下,使用
eq
操作符
==
比较两个
numpy
数组,如
[1 2 3]
[1 2 1]
,返回与
[True-True-False]
相对应的布尔值的
ndarray

因此,
如果。。在..
语句中,了解是希望
所有
元素相等还是只希望
其中任何一个元素(一个)

我建议手动检查:

i_in_leapyears = False
for ly in leapyears:
    if (ly == i).all(): # this requires all the array elements to be equal
        i_in_leapyears = True
        break

if i_in_leapyears: 
        x = i[0,0] + np.arange(len(y))/105480
        for j in x:
            years_by_day.append(j)
    else:
        x = i[0,0] + np.arange(len(y))/105120
        for j in x:
            years_by_day.append(j)

在y中打印
k
;我打赌它是一个布尔数组。如果
,则不能与
一起使用。通常,在测试阵列时,
中的
不起作用。请查看这是否有帮助-