Python 创建一个排列数据表
我有四张单子。两个是类别列表,一个是两个类别的排列列表,最后一个是每个排列的值 例如:Python 创建一个排列数据表,python,list,Python,List,我有四张单子。两个是类别列表,一个是两个类别的排列列表,最后一个是每个排列的值 例如: cat1 = [red, green, blue, yellow] cat2 = [round, square, hard, soft] permutation = ['red round', 'red square', 'red hard', 'red soft' ....] values = [8, 10, 9, 14...] 值中的数字与排列对齐。也就是说,“红色圆形”的值是8,“红色方形”的值是10
cat1 = [red, green, blue, yellow]
cat2 = [round, square, hard, soft]
permutation = ['red round', 'red square', 'red hard', 'red soft' ....]
values = [8, 10, 9, 14...]
值中的数字与排列对齐。也就是说,“红色圆形”的值是8,“红色方形”的值是10,以此类推
我的列表很长,所以这些信息不容易以列表的形式显示出来有没有办法创建一个表,使两个类别都是行和列,我的排列数据填充单元格?
我想要的是:
red green blue yellow
round 8
square 10
hard 9 ...
soft 14
我甚至不知道如何开始,所以我没有任何示例代码,但是任何指向正确方向的指针或建议都会非常有用
注意:我检查了这一点:但是,当我没有包含所有信息的预先制作的列表时,我不知道如何使其适应我的情况。这里有一种方法,将数据以您上面要求的格式打包到2D列表中,以准备打印,然后使用thg435在另一个答案中编写的漂亮的打印脚本,以均匀的间距打印2D列表
cat1 = ['red', 'green', 'blue', 'yellow']
cat2 = ['round', 'square', 'hard', 'soft']
permutations = [c1 + " " + c2 for c1 in cat1 for c2 in cat2] # making the actual permutation list
values = range(len(permutations)) # creating some values for us to use
# This part puts the permutation values into a list of lists to prepare it for printing:
matrix = [[" "] + cat1]
for c2 in cat2:
row = [c2]
for c1 in cat1:
permutation = c1 + " " + c2
row.append(values[permutations.index(permutation)])
matrix.append(row)
# The printing part is code I lifted (and slightly adapted) from @thg435's answer (see below for link):
s = [[str(e) for e in row] for row in matrix]
lens = [len(max(col, key=len)) for col in zip(*s)]
fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
table = [fmt.format(*row) for row in s]
print '\n\n'.join(table)
.您可以使用
pandas
库轻松完成此操作。它将为您完成所有漂亮的打印,您只需以适当的格式提供数据:
>>> import numpy as np
>>> import pandas as pd
>>> # Create your data structures
>>> cat1 = ['red', 'green']
>>> cat2 = ['round', 'square']
>>> values = [8, 10, 9, 14]
>>> # Reshape your values to a two dimensional numpy array
>>> data = np.array(values)
>>> data.shape = (len(cat2), len(cat1))
>>> # Create a DataFrame and print it
>>> df = pd.DataFrame(data, columns=cat1, index=cat2)
>>> df
red green
round 8 10
square 9 14
或:
>>> print(df.to_string())
red green
round 8 10
square 9 14