编写一个Python3过程来列出一个表
我正在尝试编写一个Python3过程来列出一个表 以下代码起作用:编写一个Python3过程来列出一个表,python,Python,我正在尝试编写一个Python3过程来列出一个表 以下代码起作用: row_names = ['2010', '2011', '2012', '2013', '2014'] row_names = ['2010', '2011', '2012', '2013', '2014'] Q1 = [92186686.0, 105377495.0, 105614831.0, 132754996.0, 148215172.0] Q2 = [104962317.0, 110508367.0, 12818633
row_names = ['2010', '2011', '2012', '2013', '2014']
row_names = ['2010', '2011', '2012', '2013', '2014']
Q1 = [92186686.0, 105377495.0, 105614831.0, 132754996.0, 148215172.0]
Q2 = [104962317.0, 110508367.0, 128186331.0, 155886320.0, 183020484.0]
Q3 = [112246699.0, 106483616.0, 141499253.0, 162577034.0, 209049734.0]
Q4 = [110142209.0, 104711167.0, 131444819.0, 145805847.0, 222521075.0]
column_data = [Q1, Q2, Q3, Q4]
column_names = ['Years', "Q1", 'Q2', 'Q3', 'Q4']
data = [column_names] + list(zip(row_names, Q1, Q2, Q3, Q4))
for i, d in enumerate(data):
line = ' '.join(str(x).ljust(16) for x in d)
print(line)
if i == 0:
print('-' * len(line))
但当我将其更改为具有以下代码的函数时:
def table(row_names, column_names, column_data):
data = [column_names] + list(zip(row_names, column_data))
#data = [titles] + list(zip(years, column_data))
for i, d in enumerate(data):
line = ' '.join(str(x).ljust(16) for x in d)
print(line)
if i == 0:
print('-' * len(line))
return
列数据是水平列出的,而不是垂直列出的。请帮助我了解哪里出了问题。提前感谢。正如@D.LaRocque在评论中指出的,问题可能在于这一行:
data = [column_names] + list(zip(row_names, column_data))
您需要将其更改为:
data = [column_names] + list(zip(row_names, *column_data))
zip()
函数的作用取决于给定的参数数量。请记住,列_data
是一个列表列表-[Q1、Q2、Q3、Q4]
。默认情况下,zip()
将获取该外部列表并将其压缩到行名称
,这样行名称[0]
对应于Q1
,行名称[1]
对应于Q2
,等等
相反,您希望
行名称[0]
与Q1[0]
、Q2[0]
等相对应。为此,您需要将它们作为单独的参数传递给zip()
函数。这就是上面的*
操作符所做的-它将列表[Q1,Q2,Q3,Q4]
解压为位置参数Q1,Q2,Q3,Q4
您更改了对zip
的调用方式,从包含5个列表(即行名称
、Q1
、Q2
、Q3
和Q4
)的zip改为两个列表(行名称
和列数据
)
由于column\u data
是一个包含Q1
、Q2
、Q3
和Q4
的列表,我们希望将column\u data
解包,以便zip
将其视为4个不同的列表
为了做到这一点,我们使用星号操作符
a,b,c=*[a,b,c]
因此,校正后的功能如下
def表(行名称、列名称、列数据):
数据=[列名称]+列表(zip(行名称,*列数据))
#数据=[标题]+列表(zip(年份,列数据))
对于枚举中的i,d(数据):
line=''.join(str(x).ljust(16)表示d中的x)
打印(行)
如果i==0:
打印('-'*len(行))
返回
如何调用此函数?请尝试data=[column\u names]+list(zip(row\u names,*coloum\u data))
如果唯一更改的是zip
内容所在的行,我猜您调用此函数的方式可能不同,或者zip
的行为与您现在正在压缩2个列表而不是5个列表的预期有所不同是的,@D.LaRocque说了什么……但我想让您了解可能发生了什么变化的思维过程您考虑过使用Pandas库处理表格数据吗?