python怎么比较同一列_python - 很难?第一列或第二列相同的行合并?

问 题

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

例如

A B

C A

D C

E F

N G

C N

结果

A B C D N G

E F

解决方案

也不是說很容易拉,先寫一個粗糙的版本(代碼又醜順序又完全不管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)

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值