将一个列表按照与另一个列表相同的顺序放置

2023-11-30

有一堆问题的措辞类似,但我无法找到一个真正符合我预期语义的问题。

有两个列表,A and B,我想重新排列B因此它的相对顺序与A- 的最大元素B与最大元素的当前位置相同A,最小元素也是如此,依此类推。

注意A未排序,我也不希望如此。

例如,如果输入以下内容:

a = [7, 14, 0, 9, 19, 9]
b = [45, 42, 0, 1, -1, 0]

我想要的输出是[0, 42, -1, 0, 45, 1].

请注意,预期的输出不是[0, 45, 1, 0, 42, -1],这就是你将两者压缩并排序的结果A并获取结果元素B(这是我看过的所有其他问题想要的)。

这是我的代码:

def get_swaps(x):
    out = []

    if len(x) <= 1:
        return out

    y = x[:]
    n = -1

    while len(y) != 1:
        pos = y.index(max(y))
        y[pos] = y[-1]
        y.pop()
        out.append((pos, n))
        n -= 1

    return out

def apply_swaps_in_reverse(x, swaps):
    out = x[:]
    for swap in swaps[::-1]:
        orig, new = swap
        out[orig], out[new] = out[new], out[orig]
    return out

def reorder(a, b):
    return apply_swaps_in_reverse(sorted(b), get_swaps(a))

该方法基本上是构建排序所需的交换列表A通过选择排序、排序B,然后反向应用这些交换。这可行,但速度相当慢(而且也相当令人困惑)。有更好的方法吗?


a = [7, 14, 0, 9, 19, 9]
b = [45, 42, 0, 1, -1, 0]
print zip(*sorted(zip(sorted(b), sorted(enumerate(a), key=lambda x:x[1])), key=lambda x: x[1][0]))[0]
#or, for 3.x:
print(list(zip(*sorted(zip(sorted(b), sorted(enumerate(a), key=lambda x:x[1])), key=lambda x: x[1][0])))[0])

result:

(0, 42, -1, 0, 45, 1)

你排序a, using enumerate跟踪每个项目的原始索引。您将结果压缩为sorted(b),然后根据a的原始索引。然后你打电话zip再次提取b的价值观。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将一个列表按照与另一个列表相同的顺序放置 的相关文章

随机推荐

  • 当从 CDN 使用 CKEditor 时,如何在 CKEditor 上设置插件?

    我按照以下步骤操作CKEditor 的加拿大指南页面 但我无法让它发挥作用 我尝试安装的插件是 autoembed 或任何可以让我插入 YouTube 视频 推文和所有这些不同内容类型的插件 但即使我尝试了不同的方法 我也无法获得让它工作
  • 使用这两个二维数组中的哪一个更有优势?为什么?

    在 Facebook 群组中 我看到这样一个问题 如果二维数组中的一行占主导地位 下面哪一个占优势 为什么 a for i 0 i lt 1000 i for j 0 j lt 1000 j temp temp a i j b for j
  • 如何在 Chrome 中使用 Selenium 处理“另存为”对话框 [重复]

    这个问题在这里已经有答案了 我正在尝试使用 Selenium Chrome Web 驱动程序下载文件 但我不知道如何处理 另存为 对话框 我已经看到很多关于如何使用 Firefox 执行此操作的答案 但没有看到使用 Chrome 的答案 配
  • Spring静态初始化bean

    嘿 在 Spring 中应该如何处理静态初始化 我的意思是 我的 bean 有一个静态初始化 private static final Map
  • 不幸的是,Google Play 服务在 genymotion 上停止了

    在 genymotion 上安装 google play 服务后 它显示 不幸停止 我重新启动服务器 但它不起作用 它一直显示错误消息 怎么解决 在 Genymotion 中设置 Google Play 服务 下载ARM 翻译安装程序 v1
  • urllib3.exceptions.ProtocolError: ('连接中止。', error(10054, '现有连接被远程主机强制关闭'))

    我正在尝试使用 Python Selenium chromedriver 在 chrome 上打开一个网站 Chrome 浏览器正在打开 带有警告 但 url 未打开 版本详细信息 Chrome 68 0 3440 106 硒 3 14 0
  • 我应该对密码施加最大长度限制吗?

    我可以理解 对密码施加最小长度很有意义 以保护用户免受自身伤害 但我的bank要求密码长度在 6 到 8 个字符之间 我开始想知道 这不是会让暴力攻击变得更容易吗 坏的 这是否意味着我的密码未加密存储 坏的 如果有人 希望 有一些优秀的 I
  • 如何在 Subversion 中返回旧版本的代码?

    我正在与朋友一起开发一个项目 我想返回到旧版本的代码并将其设置为当前版本 我该怎么做 我在 vs08 上使用 anksvn 我的电脑上有我想要的版本 但提交失败 我收到的消息是 提交失败 文件或目录已过期 我的电脑上也有 subversio
  • 将动态图像添加到表列在 angularjs 中不起作用

    我是 angulajs 的新手 我正在尝试在用户选择图像时将图像动态添加到列中 这是下面的代码 但它不起作用 cshtml 文件中的代码 table tr td img td tr table
  • 如何防止 Google Maps API v3 缓存图块(以节省存储空间)?

    我有一个关于 Maps js API 缓存的奇怪问题 我找不到任何解决方案 我的情况如下 我们想要显示一个简单的网站 包括基于 Maps API v3 的地图 该网站应显示在使用改进的 WebKit 引擎的嵌入式设备上 因此 显示和使用 G
  • 使 CSS 下拉菜单居中

    我试图将我的 css 下拉菜单居中 但我看不到让它工作 我尝试添加 text align center 和 margin left auto margin right 自动 但所有居中的是下拉列表项 这是怎么做到的 这是CSS bg bac
  • 在 C++ 中,我们无法在没有初始化的情况下声明引用。为什么? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 在 C 中 我们无法在没有初始化的情况下声明引用 实际原因是什么 尽管我们知道引用在运算符重载和其他概念中的使用 C 引用 在该词的普通 C 含义中 无法重新分配 因此 如果引用未初始
  • 我可以在 Android 上通过 HTML 拨打电话吗?

    为了在 iPhone 上通过 HTML 拨打电话 我创建了一个 a a 带有 href 格式的标签 a href Dial Me a Android 上有 HTML 的等效项吗 澄清 使用格式 href tele 123 555 1212
  • Python中列表所有元素的频率[重复]

    这个问题在这里已经有答案了 我有一个清单 l 1 2 2 3 1 1 2 3 4 5 6 我不想使用 l count element 方法 我不想使用 for 循环或迭代器 输出像 1 3 2 3 3 2 4 1 5 1 6 1 使用集合的
  • 如何使用多线程处理本地磁盘中存储的大量文件(使用文件锁)

    java中如何使用多线程处理本地磁盘目录中存储的大量文件 使用文件锁 您不想并行读取文件 磁盘 I O 并行性不佳 最好让单个线程读取文件 将内容发送到工作线程进行并行处理 然后从工作线程收集结果 使用优秀的ExecutorService
  • 如何用curl发送换行符?

    我尝试了以下方法来用curl发送换行符 但是 n不被curl 解释 curl X PUT d my message n http localhost 8000 hello 如何使用curl 发送换行符 有时您想要逐字提供要发送的数据 The
  • 简单的解析问题[重复]

    这个问题在这里已经有答案了 可能的重复 谁能解释这些未定义的行为 i i i i i 等等 未定义的行为和序列点 C 常见问题解答条目 在C和C 中表达式是怎样的x y解析了 作为x y or as x y x y被解析为x y而不是作为x
  • Ipad Mini 2 上奇怪的 UIAccessibility 崩溃

    我们的应用程序使用 Crashlytics 来跟踪应用程序崩溃 Crashlytics 中记录了一次非常奇怪的崩溃 仅在使用 ipad mini 时发生 我在 iphone 6s 和 iphone 6s plus 上测试时从未遇到过这个问题
  • 仅适用于 IPv4 可路由地址的正则表达式

    只能找到可路由 IPv4 地址的正则表达式是什么 EG 与 192 0 2 1 24 127 0 0 1 等不匹配 Google 似乎只能找到非常常见的 是 IP 地址 正则表达式 尝试在正则表达式中实现业务规则是一个坏主意 只需解析 IP
  • 将一个列表按照与另一个列表相同的顺序放置

    有一堆问题的措辞类似 但我无法找到一个真正符合我预期语义的问题 有两个列表 A and B 我想重新排列B因此它的相对顺序与A 的最大元素B与最大元素的当前位置相同A 最小元素也是如此 依此类推 注意A未排序 我也不希望如此 例如 如果输入