比较python中的2D数组与条件

比较python中的2D数组与条件,python,arrays,list,Python,Arrays,List,我有以下1-9的整数类型: 类别:从1到3的整数 狗:从4到6的整数 snake:从7到9的整数 我有一个类似以下内容的列表: listA =[[2, 4, 5, 7], [5, 6, 7, 8], [1, 2, 5, 8], ...] 请注意,没有一个数字可以连续出现两次的情况。 例如,[1,1,4,5]将不存在 我设法从中创建了另一个列表,如下所示: listB = [[cat, dog, dog, snake], [dog, dog

我有以下1-9的整数类型:

类别:从1到3的整数

狗:从4到6的整数

snake:从7到9的整数

我有一个类似以下内容的列表:

listA =[[2, 4, 5, 7],
        [5, 6, 7, 8],
        [1, 2, 5, 8], ...]
请注意,没有一个数字可以连续出现两次的情况。 例如,[1,1,4,5]将不存在

我设法从中创建了另一个列表,如下所示:

listB =  [[cat, dog, dog, snake], 
          [dog, dog, snake, snake], 
          [cat, cat, dog, snake], ...]
我想知道每个类别出现的奇数和偶数整数的数量

例如,狗有34个偶数,只有10个奇数,猫有24个偶数,35个奇数,蛇有13个偶数和3个奇数


有什么想法吗?有什么建议吗?

听起来你在寻找地图功能:

因此,对于2D数组,您可以执行以下操作来生成listB:

listB = []
for row in listA:
    listB.append(list(map(lambda x: num_to_animal_str(x), row))

使用“num-to-animal”功能,可根据您的规则将数字转换为动物。

听起来您在寻找地图功能:

因此,对于2D数组,您可以执行以下操作来生成listB:

listB = []
for row in listA:
    listB.append(list(map(lambda x: num_to_animal_str(x), row))

使用“num\u to\u animal”函数,可以根据您的规则将数字转换为动物。

如果您使用NumPy,则有用于此类比较的表达习惯用法。比如说,

In [3]: arr = np.array(listA)
In [4]: np.sum((arr>3) & (arr<7) & (arr % 2))
Out[4]: 3  # three dogs with odd integer identifiers
[3]中的
:arr=np.array(listA)

在[4]:np.sum((arr>3)和(arr如果您使用NumPy,则有用于此类比较的表达习惯用法。例如

In [3]: arr = np.array(listA)
In [4]: np.sum((arr>3) & (arr<7) & (arr % 2))
Out[4]: 3  # three dogs with odd integer identifiers
[3]中的
:arr=np.array(listA)

在[4]:np.sum((arr>3)&(arr中,要获得动物名称的整数列表,可以使用嵌套列表理解和字典查找:

num_to_animal = {1: 'cat', 2: 'cat', 3: 'cat',
                 4: 'dog', 5: 'dog', 6: 'dog',
                 7: 'snake', 8: 'snake', 9: 'snake'}


listA =[[2, 4, 5, 7],
        [5, 6, 7, 8],
        [1, 2, 5, 8]]

listB = [[num_to_animal[val] for val in row] for row in listA]
listB
# [['cat', 'dog', 'dog', 'snake'],
#  ['dog', 'dog', 'snake', 'snake'],
#  ['cat', 'cat', 'dog', 'snake']]
但计算每个类别的偶数/奇数值时不需要这些值,只需检查该值属于哪种动物,以及它是偶数还是奇数。为此,可以使用集合。计数器

from collections import Counter

def is_even(val):
    return val % 2 == 0

cnts = Counter((num_to_animal[val], is_even(val)) for row in listA for val in row)
cnts
# Counter({('cat', False): 1,
#          ('cat', True): 2,
#          ('dog', False): 3,
#          ('dog', True): 2,
#          ('snake', False): 2,
#          ('snake', True): 2})
True
False
表示是否为偶数。此
计数器可以像任何普通字典一样使用:

cnts[('dog', True)]
# 2

要获得动物名称的整数列表,可以使用嵌套列表理解和字典查找:

num_to_animal = {1: 'cat', 2: 'cat', 3: 'cat',
                 4: 'dog', 5: 'dog', 6: 'dog',
                 7: 'snake', 8: 'snake', 9: 'snake'}


listA =[[2, 4, 5, 7],
        [5, 6, 7, 8],
        [1, 2, 5, 8]]

listB = [[num_to_animal[val] for val in row] for row in listA]
listB
# [['cat', 'dog', 'dog', 'snake'],
#  ['dog', 'dog', 'snake', 'snake'],
#  ['cat', 'cat', 'dog', 'snake']]
但计算每个类别的偶数/奇数值时不需要这些值,只需检查该值属于哪种动物,以及它是偶数还是奇数。为此,可以使用集合。计数器

from collections import Counter

def is_even(val):
    return val % 2 == 0

cnts = Counter((num_to_animal[val], is_even(val)) for row in listA for val in row)
cnts
# Counter({('cat', False): 1,
#          ('cat', True): 2,
#          ('dog', False): 3,
#          ('dog', True): 2,
#          ('snake', False): 2,
#          ('snake', True): 2})
True
False
表示是否为偶数。此
计数器可以像任何普通字典一样使用:

cnts[('dog', True)]
# 2

行索引重要吗?@lucianopaz是的,但是对于其他计算来说。在我这里的情况下,它不重要。行索引重要吗?@lucianopaz是的,但是对于其他计算来说,它不重要。在我这里的情况下,它不重要。这如何回答问题?我不知道如何获得每只猫的偶数/奇数整数数据我所知,他已经把名单改成了“动物”“@Will-uhm,我说我已经知道如何制作列表了。这如何回答问题?我不知道如何从中获得每个类别的偶数/奇数整数。据我所知,他已经将列表转换为“动物”。@Will-uhm,我说我已经知道如何制作列表了。”