加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 用于迭代字符串列表中的字符的最快对象

发布时间:2020-12-20 11:57:14 所属栏目:Python 来源:网络整理
导读:我正在迭代单词列表以找到单词之间最常用的字符(即在列表中[hello,hank],’h’计为出现两次,而’l’计为出现一次.). python列表工作正常,但我也在研究NumPy(dtype数组?)和Pandas.看起来Numpy可能是要走的路,但还有其他的套餐要考虑吗?我怎么能更快地使这个
我正在迭代单词列表以找到单词之间最常用的字符(即在列表中[hello,hank],’h’计为出现两次,而’l’计为出现一次.). python列表工作正常,但我也在研究NumPy(dtype数组?)和Pandas.看起来Numpy可能是要走的路,但还有其他的套餐要考虑吗?我怎么能更快地使这个功能?

问题代码:

def mostCommon(guessed,li):
    count = Counter()
    for words in li:
          for letters in set(words):
              count[letters]+=1
    return count.most_common()[:10]

谢谢.

解决方法

这是使用其观点概念的NumPy方法 –

def tabulate_occurrences(a):           # Case sensitive
    chars = np.asarray(a).view('S1')
    valid_chars = chars[chars!='']
    unqchars,count = np.unique(valid_chars,return_counts=1)
    return pd.DataFrame({'char':unqchars,'count':count})

def topNchars(a,N = 10):               # Case insensitive
    s = np.core.defchararray.lower(a).view('uint8')
    unq,count = np.unique(s[s!=0],return_counts=1)
    sidx = count.argsort()[-N:][::-1]
    h = unq[sidx]
    return [str(unichr(i)) for i in h]

样品运行 –

In [322]: a = ['er','IS','you','Is','is','er','IS']

In [323]: tabulate_occurrences(a) # Case sensitive
Out[323]: 
  char  count
0    I      3
1    S      2
2    e      2
3    i      1
4    o      1
5    r      2
6    s      2
7    u      1
8    y      1

In [533]: topNchars(a,5)         # Case insensitive
Out[533]: ['s','i','r','e','y']

In [534]: topNchars(a,10)        # Case insensitive
Out[534]: ['s','y','u','o']

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读