从lis中提取元素数据随机范围

2024-04-19 00:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想拉出列表元素数量随机范围(从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随机抽取一个元素列表,所以我想得到的结果是什么 是

^{pr2}$

这是我一直做的,但问题之一是有时可以正确提取金额元素,但有时过度提取数据超过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 = ''

对不起,我的英语不好。在


Tags: 字符串文本元素列表数量lineoutsplit
2条回答

使用^{},您不需要读取整个文件。在

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))

您需要使用上下文管理器。在

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

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为您提供了一个迭代器,而mode标志中的U(对于Universal)可确保您在换行符上进行拆分,而不管您的平台、Windows或Unix如何。在

然后我们避免将整个文件甚至迭代器具体化到内存中的一个列表中,只选择要从中随机选择的列表。演示正在循环10次。每个选择都将独立于前一个选项,这意味着每个选项可以选择多次。在

要让它们都处于随机位置,也就是说,在适当的位置随机洗牌:

^{pr2}$

会给你一个随机排列的列表。在

相关问题 更多 >