【问题标题】:Printing nested list in this specific format以这种特定格式打印嵌套列表
【发布时间】:2021-05-27 22:12:10
【问题描述】:

我正在通过自动化无聊的东西,diong第6章第一次练习问题:

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

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

苹果 |爱丽丝 |狗

橙子|鲍勃 |猫

樱桃 |卡罗尔 |驼鹿

香蕉 |大卫 |鹅

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

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

这确实给了我预期的输出,但是我使用的范围参数感觉有点野蛮,所以有没有其他方法可以解决这个问题??

【问题讨论】:

  • 如果问题假设所有子列表的长度相同,那么我认为您的方法没有任何问题。
  • 是的,根据对该问题的描述,我们可以假设所有子列表的长度都相同。如果有更好的解决方法,再次满足我内心的好奇心。
  • 尽管你很专注,print(*map(' '.join, zip(*tableData)), sep='\n') 几乎是不可抗拒的,再次假设子列表的长度相同。我确实想知道为什么大卫错过了复数形式。

标签: python list nested-lists


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以使用列表推导:

    [[row[i] for row in tableData] for i in range(len(tableData[0]))]
    
    [['apples', 'Alice', 'dogs'],
     ['oranges', 'Bob', 'cats'],
     ['cherries', 'Carol', 'moose'],
     ['banana', 'David', 'goose']]
    

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2022-07-11
      相关资源
      最近更新 更多