【问题标题】:Matching lists indexes匹配列表索引
【发布时间】:2015-02-12 12:15:44
【问题描述】:

我有两个列表,它们有相同的元素。

a=[1,2,3,4,5,6,7,8,9]
b=[1,2,3,4,5,6,7,8,9]

如果我这样写:

a[::]==b[::]
>>>True

这意味着所有元素的索引都是相等的。但我想洗牌 b 直到 b 的索引与 a 的不同。

我试过这个:

import random
while a[::]==b[::]:
    random.shuffle(b)

我认为它会随机播放 b 直到所有索引都不同,但这不是我所期望的。一直以来至少一个元素具有相同的索引。我该怎么办?

【问题讨论】:

  • 例如b 是否可能是[9,2,3,4,5,6,7,8,9]

标签: python list indexing


【解决方案1】:

a[::] == b[::] 检查所有索引是否相等。只要any 索引相等,您就想继续洗牌。也就是说:

while any(a[i] == b[i] for i in xrange(len(a)):
    random.shuffle(b)

【讨论】:

    【解决方案2】:

    a[::] == b[::] -- 或者简单地说a == b -- 检查是否所有元素都相等,这就是你的while 结束的原因(可能在第一步)。

    你想要一些不同的东西,即 没有一个它们是相等的,我认为 not any 是相等的。

    我们可以使用anyzip来实现这个条件:

    >>> a=[1,2,3,4,5,6,7,8,9]
    >>> b=[1,2,3,4,5,6,7,8,9]
    >>> import random
    >>> while any(x==y for x,y in zip(a,b)):
    ...     random.shuffle(b)
    ...     
    >>> a
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> b
    [6, 5, 1, 2, 7, 8, 9, 4, 3]
    

    【讨论】:

    • 什么是 zipany?我以前不知道这些方法。你能不能一步一步地写出来,而不是while循环中的所有东西。例如:for x,y in zip(a,b)if any(x==y):...
    • 我不建议在一个元素列表上运行它:p
    • @DSM 你能写吗?
    • @domain12 anyzip 的文档在 Python 文档中得到了很好的解释 - 你需要 5 分钟的时间来阅读它,而不是要求回答者澄清:)
    • @domain12 也值得考虑无限循环的情况...鉴于[1, 2, 3][3, 3, 3]...鉴于您的问题陈述,它无法解决...
    猜你喜欢
    • 2022-11-12
    • 2015-07-03
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多