从列表中拉出元素数据随机范围

时间:2013-12-02 00:26:54

标签: python list random

我想拉出列表元素数量随机范围(从5到15)。 例如, 我的文字包含以下字符串

locasari2
jyprin
a0007a
hdki22
binarykorea
onlineforum
vobank1
chsb4322
gaiber62
wjun2104
inaekkim
zcbm22
happy_sex
ckdgns0524
lhe0925
chong4787
multy26
ver_test
danaecco
paoo
kea2209
ybyng234
smrush
kimksh2596
winproto
cs8489
aek5262
bktan12
puripink04
qkdlfjf99
nyj4154
joara5778
keepro
sswpsh72
tom770303
ckdanrl0757
himart26
lco3924
heloword
jking15

我想从5到15中随机提取一个元素列表,这样我想得到的结果 是,

locasari2,jyprin,a0007a,hdki22,binarykorea
onlineforum,vobank1,chsb4322,gaiber62,wjun2104,inaekkim,zcbm22
ckdgns0524,lhe0925,chong4787,multy26,ver_test,danaecco
paoo,kea2209,ybyng234,smrush,kimksh2596,winproto,cs8489,aek5262,bktan12,puripink04,qkdlfjf99,nyj4154
joara5778,keepro,sswpsh72,tom770303,ckdanrl0757,himart26,lco3924,heloword

这是我到目前为止所做的,但问题之一有时可以正确提取数量元素,但有时提取数据超过15个字

out = ''
handle = open('fx -01.txt').read()

for i, line in enumerate(handle.split('\n')):
    out +=  line + ','
    rndind = random.randint(5,15)
    if (i + 1) %  rndind == 0 :
    out = out.split(',')
    print len(out)
    print out
    out = ''

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

使用itertools.islice,您无需阅读整个文件。

import itertools
import random

with open('fx-01.txt') as f:
    while True:
        n = random.randint(5, 15)
        elements = [line.strip() for line in itertools.islice(f, n)]
        # itertools.islice(f, n): to fetch `n` lines from file.
        if not elements:
        # if len(elements) < 5: # Use this if you want drop trailing <5 lines.
            break
        print(','.join(elements))

答案 1 :(得分:0)

您想要使用上下文管理器。

为了循环这个,让我们假设你正在处理一个小的结果列表(尽管文件可能很大),并且选择列表的内存不是问题,我们将首先收集列表中的项目然后循环选择其中的项目。

import random
choice_list = []
with open('fx -01.txt', 'rU') as handle:
    first = 5
    last = 15
    for i in xrange(last):
        selection = handle.next()
        if first <= i <= last:
            choice_list.append(selection)

number_of_random_choices = 10
for i in xrange(number_of_random_choices):
    print random.choice(choice_list)

上下文管理器可确保您在出现错误时自动关闭文件,因此您不会将文件锁定为打开状态。

open为您提供了一个迭代器,模式标志中的U(对于Universal)确保您可以在新行上拆分,无论您的平台,Windows还是Unix。

然后我们避免将整个文件甚至迭代器实现到内存中的列表中,并选择我们想要随机选择的列表。展示了10次循环。每个选择将独立于前一个,这意味着每个选择可以多次选择。

将它们全部放在随机位置,即随机抽取它们:

random.shuffle(choice_list)
print choice_list

会给你一张随机洗牌的清单。

相关问题