Python 碰到一题,大家有没有更好的解法

2021-07-22 21:17:12 +08:00
 wuwukai007
nput_data = [
    ['格力', '格力电器'],
    ['格力', '美的', '格力电器', '美的集团'],
    ['中国民生投资股份有限公司', '中民投'],
    ['格力', '格力电器', '格力集团'],
    ['工银', '中信证券', '工行', '中国工商银行'],
    ['建行', '建设银行', '北大光华'],
    ['中国银行', '工行', '工商银行', '港交所'],
    ['中行', '建行', '工行', '中金', '工商银行', '中国银行', '建设银行'],
    ['农行', '建设银行', '建行', '中行'],
    ['中国民生投资股份有限公司', '上海金融法院', '中民投', '启信宝']
]
输出:
            {('格力', '格力电器'): 3,
             ('美的', '美的集团'): 1,
             ('中民投', '中国民生投资股份有限公司'): 2,
             ('格力', '格力集团'): 1,
             ('工银', '中国工商银行'): 1,
             ('建行', '建设银行'): 3,
             ('中行', '中国银行'): 2,
             ('工银', '工商银行'): 2}


from itertools import chain
from collections import defaultdict

data = list(chain(*nput_data))
res = [set(i) for i in data]

count = defaultdict(int)
for index,row in enumerate(res):
    for index2,i in enumerate(res):
        if row.issuperset(i) and row != i:
            count[(data[index2],data[index])] += 1
            break
        
3061 次点击
所在节点    Python
21 条回复
O5oz6z3
2021-07-24 01:25:11 +08:00
@O5oz6z3 #12 订正一下,重看了题目后发现 #12 楼的做法是错的。
正如 #3 楼所说,虽然不知道是什么题目描述居然很模糊,还没有标准答案,不过大意我猜是像 #13 楼所说在每行列表内搜索所有可能的缩写组合,也就是如 #11 楼所说不能跨行匹配。最后统计所有缩写组合的出现次数。正确的思路应该是如 #5 楼那样使用组合排列之类的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/791154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX