如何反转多个列表?

时间:2019-02-23 22:27:55

标签: python python-3.x

scores=open('scores.csv','r')


for score in scores.readlines():
    score = score.strip()
    rev=[]
    for s in reversed(score[0:]):
        rev.append(s)
    print(rev)

这是我的代码,我要做的是来自scores.csv的打印反向列表

如果我在开始时打印scores,结果将是:

['0.74,0.63,0.58,0.89\n', '0.91,0.89,0.78,0.99\n', '0.43,0.35,0.34,0.45\n', '0.56,0.61,0.66,0.58\n', '0.50,0.49,0.76,0.72\n', '0.88,0.75,0.61,0.78\n']

这看起来很正常,如果在删除列表中的所有score之后打印\n,结果将是:

0.74,0.63,0.58,0.89
0.91,0.89,0.78,0.99
0.43,0.35,0.34,0.45
0.56,0.61,0.66,0.58
0.50,0.49,0.76,0.72
0.88,0.75,0.61,0.78

看起来还是可以的,但是如果我在代码末尾打印,它会显示:

['9', '8', '.', '0', ',', '8', '5', '.', '0', ',', '3', '6', '.', '0', ',', '4', '7', '.', '0']
['9', '9', '.', '0', ',', '8', '7', '.', '0', ',', '9', '8', '.', '0', ',', '1', '9', '.', '0']
['5', '4', '.', '0', ',', '4', '3', '.', '0', ',', '5', '3', '.', '0', ',', '3', '4', '.', '0']
['8', '5', '.', '0', ',', '6', '6', '.', '0', ',', '1', '6', '.', '0', ',', '6', '5', '.', '0']
['2', '7', '.', '0', ',', '6', '7', '.', '0', ',', '9', '4', '.', '0', ',', '0', '5', '.', '0']
['8', '7', '.', '0', ',', '1', '6', '.', '0', ',', '5', '7', '.', '0', ',', '8', '8', '.', '0']

看起来像python将我的结果从十进制转换为整数,但是当我尝试使用float(s)将其转换回时,它给了我一个错误。我想知道我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:0)

始终使用csv模块读取csv文件。这个模块解析数据,根据逗号分割等等。

您的尝试只是逐行反转char。我将使用csv模块将其完全重写,这将产生已由逗号分割的令牌(默认):

import csv
with open('scores.csv','r') as scores:

    cr = csv.reader(scores)
    rev = []
    for row in cr:
       rev.append(list(reversed(row))

不会将数据转换为浮点数,也就是说,我将循环理解为+浮点数转换

rev = [[float(x) for x in reversed(row)] for row in cr]

答案 1 :(得分:0)

在您的方法中,score是一个字符串,因此它完全按照您的指示执行:逐字符颠倒整个行。您可以做两件事:

  1. 使用csv模块读取CSV文件(推荐),获取浮点值列表,然后将其取反。
  2. 将行分隔为逗号,然后反转该列表,最后将其重新缝合在一起。在Python中反转列表的一种简单方法是mylist[::-1]

对于数字2,它类似于:

score = score.strip()
temp = score.split(',')
temp_reversed = temp[::-1]
score_reversed = ','.join(temp_reversed)