以此特定格式打印嵌套列表

问题描述

我正在经历自动化无聊的事情,diong 第 6 章第一个练习题:

tableData = [['apples','oranges','cherries','banana'],['Alice','Bob','Carol','David'],['dogs','cats','moose','goose']]

我想在不使用 zip 函数或地图的情况下尝试以下输出,因为我强迫自己在不使用这些方法的情况下更深入地了解列表操作。

苹果|爱丽丝 |狗

橙子|鲍勃 |猫

樱桃 |卡罗尔 |驼鹿

香蕉 |大卫 |鹅

到目前为止,我已经尝试了以下方法

for i in range(len(tableData[0])):
    print(' '.join(subLst[i] for subLst in tableData))

这确实给了我预期的输出,但是我使用的 range 参数感觉有点粗鲁,所以还有其他方法可以解决这个问题吗??

解决方法

您可以根据索引将每个值存储在一个哈希表(字典)中,然后将结果或对应的索引值打印在一起

tableData = [['apples','oranges','cherries','banana'],['Alice','Bob','Carol','David'],['dogs','cats','moose','goose']]
         
dic = {}
for sublist in tableData:
    for i,v in enumerate(sublist):
        if i not in dic:
            dic[i]=[v]
        else:
            dic[i].append(v)
            

for k,v in dic.items():
    print(" | ".join(v))

输出

apples | Alice | dogs
oranges | Bob | cats
cherries | Carol | moose
banana | David | goose

注意:这考虑到子列表的长度相同,如果长度不同,则将显示该索引的索引值但无法知道该值属于哪个子列表索引,以解决第一个需要制作所有子列表的问题相同长度,然后处理此代码。

,

您可以使用列表理解:

[[row[i] for row in tableData] for i in range(len(tableData[0]))]

[['apples','Alice','dogs'],['oranges','cats'],['cherries','moose'],['banana','David','goose']]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...