Int参数必须是字符串或数字,而不是列表,Python cs

2024-05-17 11:14:50 发布

您现在位置:Python中文网/ 问答频道 /正文

def load_asn1_data(filename='songdata.csv'):
    import csv
    reader=csv.reader(open(filename,'r'))
    songs=[]
    for r in reader:
        songs.append(r)
    return songs
def fastest_year(songs):
    for row in songs:
        title = row[0]
        artist = row[1]
        year = int(row[2])
        tempo = float(row[3])
        artist_hotness=float(row[4])
        duration = float(row[5])
        key = int(row[6])
        loudness = float(row[7])
        mode = int(row[8])
    for speed in tempo:
        if tempo[speed]==max(tempo):
            print year[speed]

songs=load_asn1_data(filename='songdata.csv')
fastest_year(songs)

Update:现在我知道第一个索引引用行,我创建了一个for循环,其中每个变量对应于一行中特定索引的值。如果我试着运行这个,我会得到一个新的错误,float object is not iterable。我以为max函数可能不适用于float,但我测试了它,它确实起作用了。我很困惑,因为我将上一个for循环解释为,对于“tempo类”中的所有元素,如果该索引处的速度最大,则打印与该速度相关的年份。在


Tags: csvinfordefloadfloatfilenameyear
2条回答

songs是一个列表列表,在fastest_year函数中,您实际访问的是行,而不是列。您需要查看songs中的每一行,以获得所需的值。比如:

songs=load_asn1_data(filename='songdata.csv')
for song in songs:
    fastest_year(song)

虽然不知道代码的具体用途,但我不能说这是否能完全符合您的目的。在

如果这是您收到的错误:

TypeError: int() argument must be a string or a number, not 'list'

那么你的songs[2]可能是这样的[2010]或{}

请通过打印songs[2]或{}进行检查

请把它做成歌曲[2][0]

year = int(songs[2][0])

相关问题 更多 >