【问题标题】:Python: Appending a list doesn't actually append it?Python:附加列表实际上并不附加它?
【发布时间】:2016-07-08 15:53:18
【问题描述】:

我有一个包含名称和分数的 CSV 文件。我已将每一行设为单独的列表,但在将变量附加到此列表时,它实际上并没有这样做。 我的代码是:

import csv
f = open('1scores.csv')
csv_f = csv.reader(f)
newlist = []
for row in csv_f:
    newlist.append(row[0:4])

    minimum = min(row[1:4])
    newlist.append(minimum)
print(newlist)

文件中的数据正在

Person One,4,7,4
Person Two,1,4,2
Person Three,3,4,1
Person Four,2

输出肯定是['Person One', '4', '7', '4', '4'],因为最小值是 4,我将其附加到列表中。但我明白了:['Person One', '4', '7', '4'], '4', 我究竟做错了什么?我希望最小值在列表内,而不是在列表外但不明白。

【问题讨论】:

  • 您正在附加一个带有row[0:4] 的列表,如果您希望最小值包含在该列表中,您也应该使用min(row[1:4],key=int)
  • 我只是从文件中读取数据以制作列表。我想为该列表添加更多值。

标签: python csv append


【解决方案1】:

将最小值附加到每一行,然后附加行本身,您是在附加您首先切片的列表,然后将最小值添加到新列表而不是切片列表:

for row in csv_f:
    row.append(min(row[1:],key=int)
    newlist.append(row)

您也可以使用列表组合:

new_list =  [row + [min(row[1:], key=int)] for row in csv_f]

您还需要key=int,否则您可能会发现您得到奇怪的结果,因为您的分数/字符串将按字典顺序进行比较:

In [1]: l = ["100" , "2"] 

In [2]: min(l)
Out[2]: '100'

In [3]: min(l,key=int)
Out[3]: '2'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多