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

python – 列出元素的比较

发布时间:2020-12-16 23:42:21 所属栏目:Python 来源:网络整理
导读:我有一个问题,我有点难以解释所以我将使用大量的例子来帮助你们理解并看看你是否能帮助我. 假设我有两个列表,其中包含两个人从最好到最差评价的书名. User1评级为lstA,user2评级为lstB lstA = ['Harry Potter','1984','50 Shades','Dracula']lstB = ['50 Sha
我有一个问题,我有点难以解释所以我将使用大量的例子来帮助你们理解并看看你是否能帮助我.

假设我有两个列表,其中包含两个人从最好到最差评价的书名. User1评级为lstA,user2评级为lstB

lstA = ['Harry Potter','1984','50 Shades','Dracula']
lstB = ['50 Shades','Dracula','Harry Potter']

用户认为’哈利波特’比’德拉库拉’更好(惠普是指数0,德古拉是指数3)

用户2认为“哈利波特”比德古拉更糟糕(惠普是指数3,德古拉是指数1)

在这种情况下,返回一个元组(‘哈利波特’,’德古拉’)[(‘德古拉’,’哈利波特’)也很好]

用户1也比’Dracula’更好地评价’50色调’,用户2也比’Dracula'(分别为2号,3号和0号)更好地评价’50色调’.在这种情况下,没有任何反应.

该程序的最终结果应该返回一个元组列表,所以,

[('Harry Potter','50 Shades'),('Harry Potter','Dracula'),'1984'),('1984','Dracula')]

有人可以帮我指出正确的方向来提出一个给出所有元组的算法吗?

解决方法

首先以数学方式制定你的逻辑.对于长度为2的所有组合,给定索引idx_a1,idx_a2和idx_b1,idx_b2,如果是sign(idx_a1-idx_a2)!= sign(idx_b1-idx_b2),则记录组合.

下面的效率不高,但它显示了将此逻辑转换为代码的一种方法:

from itertools import combinations

lstA = ['Harry Potter','Harry Potter']

def sign(x):
    """Return +1 if integer is positive,-1 if negative"""
    return (x > 0) - (x < 0)

res = []
for a,b in combinations(lstA,2):
    idx_a1,idx_a2 = lstA.index(a),lstA.index(b)
    idx_b1,idx_b2 = lstB.index(a),lstB.index(b)
    if sign(idx_a1 - idx_a2) != sign(idx_b1 - idx_b2):
        res.append((a,b))

[('Harry Potter','Dracula')]

(编辑:李大同)

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

    推荐文章
      热点阅读