生成彩票号码 - 将R语句转换为Python

时间:2016-03-29 17:26:32

标签: python r python-3.x

我在R中有以下功能来生成10个随机抽奖号码:

 sprintf("%05d", sort(sample(0:99999, 10)))

输出:

"00582" "01287" "01963" "10403" "13274" "17705" "23798" "32808" "33668" "35794"

我已将其转换为Python,如下所示:

 print(sorted(sample(range(99999), 10)))

输出:

[208, 10724, 12078, 27425, 34903, 49666, 60057, 67482, 68730, 78811]

在第一种情况下,我得到5位数字,而在第二种情况下,数字最多可以包含5位数,但也可以少

那么,有没有类似的方法来获得5位数的列表(或第一种情况下的字符串)?

2 个答案:

答案 0 :(得分:5)

您可以将str.formatmap合并为一个

print(*map('{:05}'.format, sorted(sample(range(99999), 10))))

此上下文中的星号unpacks argument lists。换句话说,它从给定的iterable生成位置参数(在本例中为map)。

您还可以将彩票号码存储为字符串列表

# Again using a map
ns = list(map('{:05}'.format, sorted(sample(range(99999), 10))))

# Using a list comprehension
ns = ['{:05}'.format(n) for n in sorted(sample(range(99999), 10))]

请注意,python的range [start,stop] 中打开,因此请使用

range(100000)

表示0到99999之间的值范围。

答案 1 :(得分:1)

您需要format string

out = []
for number in sorted(sample(range(99999), 10))):
    out.append('{:05d}'.format(number))
print(out)