【问题标题】:Make foo.sort() and other methods return使 foo.sort() 和其他方法返回
【发布时间】:2015-11-02 07:50:45
【问题描述】:

在 Python 中,每当我尝试在这样的列表中使用 .sort()random.shuffle() 时:

a = [1, 3, 2].sort()
b = random.shuffle([1, 3, 2])

ab 将是 None,因为这两种方法都返回 None

当然,我知道.sort() 有一个sorted() 函数。但是,random.shuffle() 没有。所以解决这个问题的方法是:

a = [1, 3, 2]
random.shuffle(a)
b = a

或来自another post

b = sorted([1, 3, 2], key=lambda k: random.random())

是否有一种通用且优雅的方式将文字(由返回 None 的方法编辑的文字)存储到变量中?

【问题讨论】:

  • 为什么不写你自己的shuffled 来复制、洗牌并返回一个可迭代的参数?这些方法就地改变了它们的参数,所以你已经有了对结果的引用; 它与您传入的对象相同b = a 可能发生在相同的结果之前或之后 - 它只是一个参考,不是副本。
  • 我已经删除了 "immediate",因为不清楚您的意思 - 您指的是 literals 吗?
  • 是的,我指的是文字。
  • 那么不,没有一般的方法 - 在.sort 的情况下(或任何其他具有确定性结果的情况),您按顺序编写文字,如果需要随机只是在第二行操作它。这将比您显示的随机排序更明确。
  • 我明白了。 .sort() 是一个不好的例子。

标签: python python-2.7 methods


【解决方案1】:
a = [1, 3, 2]
b = random.shuffle(a) or a[:]

这将洗牌a,并将b指向它的副本。

or - 用于链接,返回第一个真值(或最后一个假)

a[:] - 复制a

注意:原来的a改变。 random.shuffle 修改它给出的任何列表(来自文档):

随机播放序列 x 就地...

我的建议是编写自己的 shuffle 方法。

【讨论】:

  • 但是您不能在一行中使用文字来执行此操作,并且它不会阻止像sorted 那样修改原始文件。 OP已经接受了这一事实,这让我比他们的问题更困惑;我不确定他们是否知道自己在寻找什么。
  • @jonrsharpe 添加了说明。我倾向于同意,但现在无法删除已接受的答案。
  • 好吧,你可以:b = [(random.shuffle(x), x) for x in [a[:]]][0][1]
  • @DanD。好的,但那是: 1. 不一样(我指的是使用or);和 2. 几乎不可读!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 2014-02-12
  • 1970-01-01
  • 2012-10-04
  • 2011-11-17
  • 1970-01-01
相关资源
最近更新 更多