将列表中的某些索引值转换为int

时间:2016-02-16 20:50:12

标签: list python-3.x

我已经找到了解决方法,但我无法找到一个,奇怪的是。

我正在打开一个包含以下内容的文件。

    score_list = []
    def opening_file():
         counter = 0
         with open('scores.txt', newline='') as infile:
             reader = csv.reader(infile)
             for row in reader:
                score_list.append(row[0:5])

             counter = 0
             while counter != 5:
               counter +=1
               row[counter] = int(row[counter])
             print (score_list)

    opening_file()

我想将score_list中的所有值从1-4索引值转换为整数。我尝试过以下这样做,但它不起作用。

[['Alex', '10', '0', '6', '3'], ['Bob', ' 6', '3', '7', '2']]

但它不起作用而只是产生

[['Alex', 10, 0, 6, 3], ['Bob', 6, 3, 7, 2]]

而不是{{1}}

3 个答案:

答案 0 :(得分:2)

您正在转换row中的项目,这只是一次性变量。此外,您不需要那些多余的工作,您只需将行解包到namescores部分并使用列表解析来将数字转换为整数。

with open('scores.txt', newline='') as infile:
    reader = csv.reader(infile)
    for row in reader:
        name, *scores = row
        score_list.append([name] + [int(i) for i in scores])

答案 1 :(得分:1)

您的a()循环转换var x = 6; var y = 4; var a = function(b) { return function(c) { return y + b + c; } }; x = 2; y = 5; var fn = a(x); x = 1; y = 3; console.log(fn(5)) // prints 10 = y + b + c // 3 + 2 + 5中的值发生得太晚了。每行的值已经(通过切片操作)复制到已附加到while的新列表中。而且你只在最后一行运行循环(假设你的问题中的缩进是正确的。)

尝试这样的事情:

row

我在一个范围而不是score_list循环上使用with open('scores.txt', newline='') as infile: reader = csv.reader(infile) for row in reader: for i in range(1,5): row[i] = int(row[i]) score_list.append(row[0:5]) 循环,只是因为它更方便(for循环版本可以工作很好,它只需要更多的线条)。关键是要在while的循环内更改while,然后再将行切成rowreader

答案 2 :(得分:1)

首先,代码转换row数组中的项目,但是您打印score_list数组。其次,因为它改变了阅读器外部的row变量for循环,它只改变了最后一行。你可以这样做:

import csv

def opening_file():
  with open('scores.txt', newline='') as infile:
    return [[row[0]] + [int(x) for x in row[1:]] for row in csv.reader(infile)]
score_list = opening_file()
print(str(score_list))