首页 > 解决方案 > 如何在没有 Pandas 的情况下转置列表

问题描述

list = ['AAA\ta\n', 'BBB\tb\n', 'CCC\tc\n', 'DDD\td\n', 'EEE\te\n', 'FFF\tf']

输出:

AAA   a
BBB   b
CCC   c
DDD   d
EEE   e
FFF   f

我想在没有 Pandas 的情况下转置这个列表。喜欢,所需的输出:

AAA   BBB   CCC   DDD   EEE   FFF
 a     b     c     d     e     f

标签: pythonlisttabstransposeword

解决方案


你应该首先剥离你的字符串\n并用\t.
一旦你有你打印你的行:

input_list = ['AAA\ta\n', 'BBB\tb\n', 'CCC\tc\n', 'DDD\td\n', 'EEE\te\n', 'FFF\tf']

new_list = list(map(lambda x: x.strip().split("\t"), input_list))
nb_row = len(new_list[0])
for i in range(nb_row):
    print("\t".join([x[i].rjust((max(len(y) for y in x) + len(x[i]))//2) for x in new_list]))

rjust根据同一列中最长的文本将“单元格”的文本居中。
这是一个有趣的练习,但是一旦其中一个文本超过 a 的长度,您的输出就会变得混乱\t(对于此类任务更喜欢 pandas):

AAA     BBB     CCC     DDD     EEE     FFF
 a       b       c       d       e       f

编辑:如果您想以与输入相同的格式获得输出:

output = ["\t".join([x[i].rjust((max(len(y) for y in x) + len(x[i]))//2) for x in new_list]) + "\n" for i in range(nb_row)]

这给出了:

['AAA\tBBB\tCCC\tDDD\tEEE\tFFF\n', ' a\t b\t c\t d\t e\t f\n']

推荐阅读