为啥我的列表没有加入当我尝试追加它们 Python

Posted

技术标签:

【中文标题】为啥我的列表没有加入当我尝试追加它们 Python【英文标题】:Why my lists are not Joining When I try to Append Them Python为什么我的列表没有加入当我尝试追加它们 Python 【发布时间】:2017-11-26 03:24:05 【问题描述】:
import csv
filename='songdata.csv'
reader=csv.reader(open(filename,'r'))
header=next(reader)

data=[]
for row in reader:
    # row=[Song, Artist, Year, Tempo, Hotness, Duration, Key, Loudness, Mode]
    Song=row[0]
    Artist=row[1]
    Year=int(row[2])
    Tempo=float(row[3])
    Hotness=float(row[4])
    Duration=float(row[5])
    Key=int(row[6])
    Loudness=float(row[7])
    Mode=int(row[8])
    data.append([Song, Artist, Year, Tempo, Hotness, Duration, Key, Loudness, Mode])

for tempo in data:
    p=[]
    p.append(tempo[3])
    print p

我的 CSV 文件包含歌曲、艺术家、年份、速度、热度、持续时间、键、响度、模式等列。我创建了一个空列表,并尝试将代表 Tempo 的所有浮点值附加到此列表中,但我一直得到一堆代表每个浮点的单独列表值。似乎没有实际附加到 p。我什至尝试使用我不久前制作的函数来展平结果,但它没有任何效果。有什么建议吗?

【问题讨论】:

for tempo in data: p=[] p.append(tempo[3]) => p = [] 必须在循环之外! 【参考方案1】:
for tempo in data:
    p=[]
    p.append(tempo[3])

没有意义,因为p 每次在循环中都会重置。所以把p的init移到循环之前。

更好的是:使用 列表推导 来避免此类错误:

p = [tempo[3] for tempo in data]

【讨论】:

当吉特!你知道我要像这样完全发布一个答案,即使有关于使用列表组合的提示;-) +1 非常感谢!这应该很明显,但我仍然只是一个初学者。 @ChristianDean :) 如果没有 listcomp,回答起来就没那么有趣了。我不断重复有关 listcomps 的内容,因为它们不仅美观,而且是避免此类副作用错误的最佳方法。

以上是关于为啥我的列表没有加入当我尝试追加它们 Python的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我追加到其中的列表时,元组的内容会发生变化,但在更新变量时不会发生变化?

当我更新我的列表时,它没有在后端更新列表的数量仍然相同,为啥?

Python为啥向二维列表中追加元素后所有元素都变一样了

当我尝试从单链表中删除节点时,为啥我的 C 程序会崩溃

Python Pandas 追加数据框列表 [关闭]

当我尝试从文本文件输入值时,为啥我的类列表(在 C++ 中)会引发错误?