如何在python中执行此排序操作

时间:2015-12-08 21:07:58

标签: python iteration generator sorted

我正在创建一个模块来分析给定文本中的标记和分隔符模式的频率,并将其分成句子。

我有一个类“SequencePattern”,它在一组标记化句子中标识一个元素(标记或分隔符),其中每个SequencePattern都有一个由元组组成的列表属性“occurrence”({{1这个特定元素实际发生的地方。 SequencePattern类有一个类级别字段seq_patterns(a n_sentence, n_element),其中存储了所有单独的SequencePattern实例。

在处理的这个阶段,我只有单元素的SequencePatterns,并且已经淘汰了所有这样的SequencePatterns,其中< 2次出现。但是SequencePattern是set的子类,现在的想法是找到“两个元素”的SequencePatterns。

我需要做的下一件事是遍历除草后剩下的所有单元素SequencePatterns,找出在同一个句子中找到两个(或更多)相邻事件的位置,即tuple所在的位置相同且n_sentence相差1。

所以我需要按照这些方针做点什么:

n_element

...但当然这不起作用:我得到

occurrences_by_text_order = sorted( SequencePattern.seq_patterns.occurrences )

不知怎的,我需要在seq_patterns中对所有SequencePatterns进行迭代,然后为每个迭代完成所有这些事件的“嵌套”迭代......我需要提交大量已传递的元组({{1 }}}到AttributeError: 'set' object has no attribute 'occurences' 函数。

我不是一个经验丰富的Pythonista,但我怀疑这是一个发电机的工作(?)。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

def get_occurrences():
    for seq_patt in SequencePattern.seq_patterns:
        for occurrence in seq_patt.occurrences:
            yield occurrence
occurrences_by_text_order = sorted( get_occurrences() ) 

然后打印出可能多次出现的所有双元素序列的列表(我们现在知道不可能出现频率> 1的双元素序列其他地方):

prev_occurrence = None
for occurrence in sorted( occurrence for seq_patt in SequencePattern.seq_patterns for occurrence in seq_patt.occurrences ):
    if prev_occurrence and ( occurrence[ 0 ] == prev_occurrence[ 0 ] ) and ( occurrence[ 1 ] - prev_occurrence[ 1 ] == 1 ):  
        print( '# prev_occurrence %s occurrence: %s' % ( prev_occurrence, occurrence, ))
    prev_occurrence = occurrence