搜尋

首頁  >  問答  >  主體

python - 很难?第一列或第二列相同的行合并?

某一行中的字母,如果有在其他行也出现,则将他们合并为一行。
例如

A B
C A
D C
E F
N G
C N

结果

A B C D N G
E F
PHP中文网PHP中文网2889 天前359

全部回覆(2)我來回復

  • 巴扎黑

    巴扎黑2017-04-18 09:07:43

    也不是說很容易拉,先寫一個粗糙的版本(程式碼又醜順序又完全不管XD),再來慢慢改進吧:

    char2id = {}
    id2charset = {}
    
    def getcharset(c):
        try:
            return id2charset[char2id[c]]
        except:
            return None
    
    def newcharset(chars):
        newset = set(chars)
        return newset
    
    def merge(charset1, charset2):
        if id(charset1)==id(charset2):
            return
        charset1 |= charset
        for c in charset2:
            char2id[c] = id(charset1)
        id2charset.pop(id(charset2))
    
    with open('test2') as reader:
        for line in reader:
            chars = line.strip().split()
            newset = newcharset(chars)
            id2charset[id(newset)] =newset
    
            for c in chars:
                charset = getcharset(c)
                if charset:
                    merge(newset, charset)
                else:
                    char2id[c] = id(newset)
    
    with open('report', 'w') as writer:
        for id, charset in id2charset.items():
            print(' '.join(charset), file=writer)

    資料 test:

    A B
    C A
    D C
    E F
    N G
    C N
    X Y
    F P
    P Q
    X Z

    結果:

    P E Q F
    X Y Z
    B D C G N A

    建議你檢查的 script 這樣寫就好:

    from collections import Counter
    
    with open('report', 'r') as reader:
        ct = Counter()
        for line in reader:
            ct += Counter(line.strip().split())
    
    for item, count in ct.most_common():
        if count <= 1:
            break
        print(item, count)

    我回答過的問題: Python-QA

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:07:43

    雷雷

    回覆
    0
  • 取消回覆