【问题标题】:Finding the smallest number in a list from a textfile: Python从文本文件中查找列表中的最小数字:Python
【发布时间】:2017-09-16 08:53:52
【问题描述】:

在我的代码中,我试图从文本文件中获取数字列表并找到其中最小的两个。我该怎么做?

Myfile = open("RoundOneTotalScores.txt","r")

AScore = ()
BScore = ()
CScore = ()
DScore = ()
EScore = ()
FScore = ()

for line in Myfile:
    if "A" in line.split(',')[0]:
        AScore = line.split(',')[1]

for line in Myfile:
    if "B" in line.split(',')[0]:
        BScore = line.split(',')[1]

for line in Myfile:
    if "C" in line.split(',')[0]:
        CScore = line.split(',')[1]

for line in Myfile:
    if "D" in line.split(',')[0]:
        DScore = line.split(',')[1]

for line in Myfile:
    if "E" in line.split(',')[0]:
        EScore = line.split(',')[1]

for line in Myfile:
    if "F" in line.split(',')[0]:
        FScore = line.split(',')[1]


list1 = [AScore, BScore, CScore, DScore, EScore, FScore]

int(list1)
smallest = min(list1)
print(smallest)

Myfile.close()

不断出现的错误是: 回溯(最近一次通话最后): 文件“”,第 1 行,在 消除R1() EliminateR1 中的文件“D:\NEA Real\Test3.py”,第 39 行 整数(列表 1) TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”

【问题讨论】:

  • 你的 .txt 文件是什么样子的?
  • A, 29 (\n) B, 14 (\n) C, 32 (\n) D, 18 (\n) E, 11 (\n) F, 35(每个在一个换行)
  • 我猜重点是给出两个最小值的字母(以及值?),或者你可以忽略它们?
  • 我需要找到两个最低的分数,然后将四个(不是两个最低的)保存到一个新的文本文件中。

标签: python list min


【解决方案1】:

这是一个示例,假设您的数据看起来像这样。如果你想要最低限度,你可以使用min。如果您想要两个最小值,您可以sort 列表并选择前两个:

txt = """A,1
B,3
F,5
D,4
C,2"""

values = [int(line.split(',')[1]) for line in txt.splitlines()]
print(values)
# [1, 3, 5, 4, 2]
print(min(values))
# 1
print(sorted(values))
# [1, 2, 3, 4, 5]
print(sorted(values)[:2])
# [1, 2]

如果你从文件中读取,你可以使用:

with open("RoundOneTotalScores.txt") as f:
    lines = f.readlines()
values = [int(line.split(',')[1]) for line in lines]
print(values)
# [1, 3, 5, 4, 2]
print(min(values))
# 1
print(sorted(values))
# [1, 2, 3, 4, 5]
print(sorted(values)[:2])
# [1, 2]
print(sorted(values)[2:])
# [3, 4, 5]

注意,list、dict、sets等集合的定义是不需要定义AScoreBScore、...

【讨论】:

  • 谢谢 Eric Duminil,但这样做的基础是:文本文件中的分数将会改变
  • 这真是太棒了。谢谢你。现在当它打印两个最低值时,我怎样才能将它们分开以便我可以单独使用它们?
  • 只是一个小建议:您可以在收到第一行的数据后离开with 块。无需长时间打开文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 2015-08-29
  • 2014-01-20
  • 2016-04-05
相关资源
最近更新 更多