python – 列出元素的比较

前端之家收集整理的这篇文章主要介绍了python – 列出元素的比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,我有点难以解释所以我将使用大量的例子来帮助你们理解并看看你是否能帮助我.

假设我有两个列表,其中包含两个人从最好到最差评价的书名. 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')]

猜你在找的Python相关文章