比较python中的2D数组与条件
我有以下1-9的整数类型: 类别:从1到3的整数 狗:从4到6的整数 snake:从7到9的整数 我有一个类似以下内容的列表:比较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
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,我说我已经知道如何制作列表了。”