如何在NumPy数组中创建元素的所有部分列表(Python列表)

时间:2014-02-02 11:59:58

标签: python list numpy

我有一个具有不同长度字符串元素的NumPy数组(或Python列表):

array(['*,V*,UV,**,a2*,IR' , 'SB*,SB*,V*,UV,**,*,a2*,IR' , '*,V*,a2*' , ...])

每个元素都是一组用逗号分隔的缩写。如何在整个数组(列表)中找到所有不同的缩写及其计数?换句话说,我需要这样的东西:

在我的阵列中,V *被发现5次,IR - 7次等。最短的答案是值得赞赏的。

2 个答案:

答案 0 :(得分:3)

collections.Counter与生成器表达式一起使用:

>>> from collections import Counter
>>> lis = ['*,V*,UV,**,a2*,IR' , 'SB*,V*,UV,**,*,a2*,IR' , '*,V*,a2*']
>>> Counter(y for x in lis for y in x.split(',') if '*' in y)
Counter({'V*': 3, '*': 3, 'a2*': 3, '**': 2, 'SB*': 1})

请注意,如果缩写表示glob pattern,则所有数组项实际上都是有效的glob模式,但目前我只计算包含至少一个'*'的模式。如果不需要此类过滤,您可以删除if '*' in y部分。

答案 1 :(得分:1)

你的'V *'出现3次,而不是5 ......

使用collections.Counterjoin字符串列表,然后使用split

In [755]: ar=array(['*,V*,UV,**,a2*,IR' , 'SB*,V*,UV,**,*,a2*,IR' , '*,V*,a2*' ])

In [756]: from collections import Counter

In [757]: Counter(','.join(ar).split(','))
Out[757]: Counter({'*': 3, 'V*': 3, 'a2*': 3, 'UV': 2, 'IR': 2, '**': 2, 'SB*': 1})