【问题标题】:I want to write a program in python for Square and taking input from csv file我想在 python 中为 Square 编写一个程序并从 csv 文件中获取输入
【发布时间】:2015-08-27 08:30:56
【问题描述】:

当我尝试运行这段代码时,我得到了这些错误

Traceback (most recent call last):
   File "txt_square.py", line 7, in <module>`enter code here`  
   sqr = [elem **2 for elem in sqr_lst]
   TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

import csv
import math

with open('/home/amankumar/test.csv', 'rb') as fl:
    reader = csv.reader(fl)
    sqr_lst = list(reader)
    sqr = [elem **2 for elem in sqr_lst]
print sqr

【问题讨论】:

    标签: python csv


    【解决方案1】:

    一个 csv 阅读器对象包含作为项目列表的行,并且正如错误所说,您不能将 ** 操作数用于列表和整数。如果要在项目之间执行此操作,则需要遍历行。

    你可以给我们一个列表理解

    sqrs = [[i **2 for for i in elem] for elem in sqr_lst ]
    

    然后结果将是所有项目的 sqr 的嵌套列表(每个嵌套列表是一行)

    【讨论】:

    • 如果你完全按照那样做,那么sqr 将只是最后一行的平方。
    • @tobias_k 在这种情况下,OP 应该在每次迭代中打印 sqr 或保存它们,但作为更 Pythonic 的方式,我建议使用列表理解。
    【解决方案2】:

    其实这里发生了什么,

    如果您遍历 reader(在您的代码中),这将返回您的 str 列表列表,如下所示:-

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

    所以你可以简单地使用这组代码[int(i[0])**2 for i in reader]

    或者您可以在列表理解中应用您需要的任何检查。

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多