繁体   English   中英

从数组Python中的文本文件中随机字符串列表?

[英]Randomize a string list from a text file in an array Python?

我有一个文本文件,其中列出了几个国家,称为countries.txt 我正在尝试从文本文件中获取这些国家,并将它们放置在一个数组中,然后将它们随机化并打印出随机列表。 我尝试过几种方式来编辑代码,但没有一种能产生我想要的结果。

下面是我尝试的第一种方法。 我知道我正在打印实际的数组,但是我正在尝试一些方法:

results = []

def load():
    with open('countries.txt') as inputfile:
        for line in inputfile:
            results.append(line)
            random.shuffle(results)
            print(str(results))

结果如下:

['Armenia\n']
['Bangladesh\n', 'Armenia\n']
['China\n', 'Armenia\n', 'Bangladesh\n']
['Denmark\n', 'Bangladesh\n', 'Armenia\n', 'China\n']
['Armenia\n', 'Bangladesh\n', 'Denmark\n', 'China\n', 'Estonia\n']
['Armenia\n', 'Estonia\n', 'Bangladesh\n', 'China\n', 'France\n', 'Denmark\n']
['France\n', 'China\n', 'Bangladesh\n', 'Armenia\n', 'Estonia\n', 'Denmark\n', 'Ghana']

第二次尝试使用以下代码:

results = []

def load():
    with open('countries.txt') as inputfile:
        for line in inputfile:
            results.append(line)
            random.shuffle(results)
            print(str(line))

从某种意义上说,结果是正确的,因为它按照我想要的方式列出了国家,但并未将它们随机化。 结果是:

Armenia
Bangladesh
China
Denmark
Estonia
France
Ghana

我最后一次尝试是使用以下代码:

结果= []

def load():
    with open('countries.txt') as inputfile:
        for line in inputfile:
            results.append(line)
            random.shuffle(line)
            print(str(line))

但是此函数产生以下错误:

File "C:\Users\redcode\AppData\Local\Programs\Python\Python36-32\lib\random.py", line 274, in shuffle
    x[i], x[j] = x[j], x[i]
TypeError: 'str' object does not support item assignment

产生错误的特定行是random.shuffle(line)

我是否缺少某些东西,或者有其他方法可以做到这一点,因为我找不到与尝试过的东西不同的东西。

那么,如何将列表从文本文件获取到数组中,将列表随机化并打印结果(不带[]"\\n"并且以第二列表中所示的常规列表格式显示)?

第二次尝试是直接打印line变量。 您应该从结果列表中打印项目。 这样的事情应该起作用:

results = []

def load():
    with open('countries.txt') as inputfile:
        for line in inputfile:
            results.append(line)
            random.shuffle(results)
            for result in results:
                print(str(result)) 

您可能希望采用我添加的内部for循环,具体取决于您希望结果如何显示。

第一种有效-除了您在添加每一行之后一次又一次地洗牌列表之外。 最后一次就足够了。

第二个功能相同,只是不打印列表,而是打印刚添加的行。 这些按它们在文件中的顺序排列。

第三个失败,因为您不能将字符串随机播放(因为它是不可变的)。 无论如何,这没有任何意义。

'\\n'字符是文件中的换行符。 使用字符串方法.strip()删除它们。

文件具有方便的帮助程序方法readlines() ,可将所有行一次读取到列表中。

但是,如果您还想使用strip ,那么使用列表推导会更容易:

with open('countries.txt') as inputfile:
    results = [line.strip() for line in inputfile]
results.shuffle()
for result in results:
    print(result)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM