【问题标题】:how to get only some of the strings in a list while using random,shuffle? in python如何在使用随机、随机播放时只获取列表中的一些字符串?在蟒蛇
【发布时间】:2013-12-28 04:49:56
【问题描述】:

从列表创建字典时,我使用

for i in range(10):
    random.shuffle(list)
    print "".join(list)

这样我得到列表的 10 个不同的随机组合,但如果列表有 10 个字符串,我得到的每个随机数将有 10 个字符串,如下所示:

>>> list
['1', 'n', 'f', 'g', 'z', 'j', '5', 's', '2', '3']
>>> for i in range(5):
...    random.shuffle(list)
...    print "".join(list)
... 
13jgzs25nf
15zngs2jf3
jgfsn3z251
g3sf512zjn
5nsj3fg21z

但是,我只想从列表中的 10 个字符串中的 5 个编译随机组合,我该怎么做?

ty!

===========================

@volatility
in an attempt to use what you showed me but try to get a full list like i did in my question i did this:

>>> lst=["1","2","3","f","s","g","5","n","z","j"]
>>> for i in range(10):
...     random.sample(list, 3)
...     print "".join(list)
... 
['5', '2', 'n']
gj5nfs231z
['n', '5', '1']
gj5nfs231z
['z', '3', 'j']
gj5nfs231z
['5', 'g', 'n']
gj5nfs231z
['g', 'z', '2']
gj5nfs231z
['2', '3', 'f']
gj5nfs231z
['g', '2', '5']
gj5nfs231z
['3', 'n', '2']
gj5nfs231z
['g', 'z', '2']
gj5nfs231z
['n', 's', 'g']
gj5nfs231z

我猜这是进步?我最终想要得到的是一个看起来像这样的输入(如果我使用上面的列表)

52n
z3j
5gn
23f
g25
3n2
gz2
nsg

这样可行吗?

【问题讨论】:

  • 您将 Volatility 的功能与 falsetru 的调用模式混合在一起,这将不起作用,因为 sample 不是就地,但shuffle 是。

标签: python random dictionary shuffle


【解决方案1】:

您可以为此使用random.sample

>>> lst = ['1', 'n', 'f', 'g', 'z', 'j', '5', 's', '2', '3']
>>> import random
>>> random.sample(lst, 5)
['f', 's', '3', 'z', 'n']

要获得您想要的输出,您只需将其放入 for 循环中即可:

>>> for i in range(10):
...    print ''.join(random.sample(lst, 5))
...
jn513
13g2f
nfsj5
nj3s1
3zn51
sgj2f
5ns3g
sg51z
23j1z
n2g53

旁注:不要使用 list 作为变量名 - 它会隐藏内置的 list 类型。

【讨论】:

  • 谢谢你让我进步了一点。虽然我正在寻找的输出将是一个干净的输出(这就是我使用“”.join的原因)但有多个选项。所以我会得到一个看起来像我的问题的输入,但每个字符串都会更短
  • 你是男人!非常感谢你花时间给我看这个..这对我有很大帮助!
  • @Giladiad 不用担心 :)
【解决方案2】:

使用切片表示法。

>>> lst = ['1', 'n', 'f', 'g', 'z', 'j', '5', 's', '2', '3']
>>> random.shuffle(lst)
>>> lst[:5]
['n', 'j', 's', 'z', 'f']
>>> ''.join(lst[:5])
'njszf'

顺便说一句,不要使用list 作为变量名。它隐藏了内置函数list


>>> lst = ['1', 'n', 'f', 'g', 'z', 'j', '5', 's', '2', '3']
>>> for i in range(10):
...     random.shuffle(lst)
...     print ''.join(lst[:5])
...
s3f52
f351s
gnz5j
g2s5n
g3n51
g2fsj
532jf
3f1ng
jnfg5
z35sn

【讨论】:

  • 好的,我该如何使用它,但让它显示 10 或 20 种可能的组合,而不仅仅是一个?
猜你喜欢
  • 2017-08-16
  • 2020-11-23
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多