Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个排列数据表_Python_List - Fatal编程技术网

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