【问题标题】:Randomize a string list from a text file in an array Python?从数组Python中的文本文件中随机化字符串列表?
【发布时间】:2017-07-25 13:08:58
【问题描述】:

我有一个名为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",并采用第二个示例所示的普通列表格式)?

【问题讨论】:

    标签: arrays list python-3.x random


    【解决方案1】:

    第一个有效——除了你在添加每一行之后一次又一次地打乱列表。最后一次就够了。

    第二个做同样的事情,除了你不打印列表,你打印你刚刚添加的行。它们按照它们在文件中的顺序排列。

    第三个失败是因为你不能洗牌一个字符串(因为它是不可变的)。反正也没有意义。

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

    【讨论】:

      【解决方案2】:

      在您的第二次尝试中,您直接打印 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 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        相关资源
        最近更新 更多