python - 寻找一种在python中将2个列表重新链接在一起的方法
问题描述
我基本上有 1 个列表:列表 [(name 1, score 1), (name 2, score 2) etc]。我使用另一个列表中的分数来根据算法随机化那些分数,但之后我想将每个分数链接回每个名称。分数可以相同,但没关系。如果 2 个分数相同但名称不同,则哪个分数与哪个名称相关联并不重要,因为分数是相同的。请帮忙!
输入:list1 = [(0, a), (100, b), (200, c), (300, d)] list2 = [[200, 0], [300, 100]]
预期输出:list3 = [[(200, c), (0, a)], [(300, d), (100, b)]]
如何从 list2 和 list1 中获取 list3?
*list1 = [(0, a), (0, b), (0, c), (0, d)] 也是一个有效的列表。
那么 list3 = [[(0, a), (0, b)], [(0, c), (0, d)]] 或 list3 = [[(0, d), ( 0, b)], [(0, c), (0, a)]]*
解决方案
您可以使用自定义键功能进行排序list1
,尽管这可能很慢:
def sort_by_order_in_other_list(other_list):
def _inner(tup):
return other_list.index(tup[0])
return _inner
list3 = sorted(list1, key=sort_by_order_in_other_list(list2))
这可能是非常小的列表的最佳算法。对于更长的列表,我建议您先通过以list2
更容易参考:
dict2 = {i: value for i, value in enumerate(list2)}
list3 = sorted(list1, key=lambda x: dict2[x[0]])
推荐阅读
- java - Java:使用while循环改变行的顺序
- python - 使用 Rsync 从 EC2 自动备份到 NAS
- spyder - 执行前重启 spyder ipython 控制台
- javascript - 使用eslint错误更新javascript数组中所有对象的对象值
- openssl - 无法连接:加载 X.509 密钥对时出错
- python - Matplotlib FuncAnimation 抛出“AttributeError:‘NoneType’对象没有属性‘间隔’”
- azure-active-directory - 在 .NET Core 3.1 中验证 Azure AD 生成的 JWT 签名和算法
- outlook-2013 - Outlook 2013 中附加文件的默认文件夹更改
- javascript - 如何在密码字段中添加图标以在 Rails 中显示和隐藏密码
- pine-script - 每次多头/空头入场时都需要重置 ATR 追踪止损