从另一个数组创建数组的子集:Python

时间:2018-05-16 17:08:37

标签: python arrays

我有一个关于使用数组的基本问题:

a= ([ c b a a b b c a a b b c a a b a c b]) 
b= ([ 0 1 0 1 0 0 0 0 2 0 1 0 2 0 0 1 0 1])

I)有一个简短的方法,可以计算'c'ab中的0,1和2以及'b'对应的时间a {1}}对应0,1,2等等

II)如何创建新数组ca}的子集)和db的子集),使其仅包含这些元素a中的相应元素是'c'

3 个答案:

答案 0 :(得分:1)

zip

<强> 解释

  1. count有两个列表,并在它们之间运行一个比喻拉链。导致元组列表
  2. 我使用了一种简单的方法,我只是维护一个地图/字典而不是它看到一对char-int元组有多少次
  3. 然后我制作2个子列表,您可以修改这些子列表以使用相关字符并找出它映射到的内容
  4. 替代方法

    正如abarnert建议您可以使用来自收藏品的A Counter。 或者您可以在z上使用z.count('a',1)方法。例如:defaultdict。或者您可以使用{'SAM (manager)','MICHAEL (assi)','BEN(Servent)'} 代替。

答案 1 :(得分:0)

这些问题有点模糊但是这里使用AncestorType=ComboBox是一种快速方法(有些人会称之为脏),但我认为应该首选不使用Pandas而写的东西。

Pandas

问题1

如果我正确解释它,您可以交叉制表两个数组: import pandas as pd #create OP's lists a= [ 'c', 'b', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'a', 'c', 'b'] b= [ 0, 1, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 1, 0, 1] #dump lists to a Pandas DataFrame df = pd.DataFrame({'a':a, 'b':b}) 。交叉表基本上计算每个数字对应于特定字母的次数。 pd.crosstab(df.a, df.b).stack()是将.stack的输出转换为更易读的格式的命令。

.crosstab

问题2

在这里,我使用#question 1 pd.crosstab(df.a, df.b).stack() ## -- End pasted text -- Out[9]: a b a 0 3 1 2 2 2 b 0 4 1 3 2 0 c 0 4 1 0 2 0 dtype: int64 的布尔索引功能仅选择数组Panda中与值a对应的元素。因此,对于'c'df.a=='c'True的每个值,a将返回'c'False将返回布尔语句为true的df.loc[df.a=='c','a']的值。

a

答案 2 :(得分:0)

Python列表:https://www.tutorialspoint.com/python/python_lists.htm有一个计数方法。

我建议你先按照评论中的说法对两个列表进行压缩,然后计算元组c,1的出现以及元组c,0的出现并总结它们,这就是你所需要的(I),基本上。 / p>

对于(II),如果我理解正确,你必须使用压缩列表并使用lambda x对它们应用过滤器:x [0] == x [1]