【问题标题】:Accidentally placed lists inside of list?不小心将列表放在列表中?
【发布时间】:2017-07-24 23:03:22
【问题描述】:

当我运行这个文件时,一切似乎都正确计算,除了我最终得到了列表本身内部的各个列表元素。这使得我想对列表的各个部分执行一些其他操作变得困难。

我的代码:

growthslist = []
f = open("growths.txt",'r')
count = 0
for line in f:
    count+=1
charnum = int((count/9))
f.seek(0)
for i in range(count):
    growthslist.append(f.readline().splitlines())
namelist = []
namecounter = 0
for i in range(charnum):
    namelist.append(growthslist[namecounter])
    namecounter +=9
print(namelist)

当我运行此代码时,它返回 [['Test 1']、['Test 2']、['Test 3']、['Test 4']、['Test 5']]。 对此我有什么办法吗?

【问题讨论】:

  • 删除.splitlines()
  • 您可能会发现 enumerate 在您的代码中很有用。 ....for count, line in enumerate(f): ...

标签: python python-3.x io


【解决方案1】:

这部分:

growthslist.append(f.readline().splitlines())

是你的问题。 str.splitlines() 返回一个列表。这就是为什么您看到的是列表列表,而不是平面列表。但是你不需要str.splitlines(),因为你已经在使用file.readline()。只需使用它:

growthslist.append(f.readline())

如果您需要从行中去除多余的空格,请使用str.strip()

growthslist.append(f.readline().strip())

正如@idjaw 在 cmets 中所述,实现目标的另一种方法是读取文件的内容,然后使用 splitlines() 分隔每一行,删除任何尾随空格:

f.read().splitlines()

另外,请考虑使用context manager statement with。它将确保您的文件始终关闭,无论程序执行期间出现任何错误或问题。

【讨论】:

  • 这很奇怪,因为当我只使用 f.readline 时,我得到了 EOL 字符。这是我的输出:['Test1\n', 'Test2\n', 'Test3\n', 'Test4\n', 'Test5\n']
  • @Absolutely-disgusting 我明白了。如果您有多余的空格,请使用str.strip() 将其删除。我将更新我的答案以包含此内容。
  • @Absolutely-disgusting 很高兴我能帮忙:)
  • 或者,我认为你可以这样做f.read().splitlines()。不过需要测试一下。
  • @idjaw 我刚刚测试过,我相信你是对的。谢谢。我会将其添加到我的答案中。
【解决方案2】:

f.readline() 返回一行。没有理由拆分它。 .splitlines() 把它变成一个列表。

【讨论】:

    【解决方案3】:

    你可以试试这个:

    f = [i.strip('\n') for i in open('filename.txt')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 2013-04-23
      • 2021-07-02
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多