Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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,我有一个列表和一个列表如下 >>> list2 = [["1","2","3","4"],["5","6","7","8"],["9","10","11","12"]] >>> list1 = ["a","b","c"] 我压缩了上面两个列表,以便可以逐个索引匹配它们的值索引 >>> mylist = zip(list1,list2) >>> mylist [('a', ['1', '2', '3', '4']), ('b

我有一个
列表
和一个
列表
如下

>>> list2 = [["1","2","3","4"],["5","6","7","8"],["9","10","11","12"]]
>>> list1 = ["a","b","c"]
我压缩了上面两个列表,以便可以逐个索引匹配它们的值索引

>>> mylist = zip(list1,list2)
>>> mylist
[('a', ['1', '2', '3', '4']), ('b', ['5', '6', '7', '8']), ('c', ['9', '10', '11', '12'])]
现在我尝试使用

>>> for item in mylist:
...     print item[0]
...     print "---".join(item[1])
...
它产生了这个输出,这是我的
所需输出

a
1---2---3---4
b
5---6---7---8
c
9---10---11---12

现在,我的问题是有一种更干净更好的方法来实现我想要的输出,或者这是最好的方法(简短易读)。

好吧,你可以避免一些临时变量,使用更好的循环:

for label, vals in zip(list1, list2):
    print label
    print '---'.join(vals)

不过,我不认为您会从根本上得到任何“更好”的结果。

下面的
for
循环将打印和联接操作合并为一行

 for item in zip(list1,list2):
     print '{0}\n{1}'.format(item[0],'---'.join(item[1]))

它的可读性可能不如完整循环解决方案,但以下内容仍然可读且较短:

>>> zipped = zip(list1, list2) 
>>> print '\n'.join(label + '\n' + '---'.join(vals) for label, vals in zipped)
a
1---2---3---4
b
5---6---7---8
c
9---10---11---12

这里有另一种方法来实现这个结果。它比较短,但我不确定它是否更具可读性:

print '\n'.join([x1 + '\n' + '---'.join(x2) for x1,x2 in zip(list1,list2)])

你可能认为干净,但我不认为你的程序的其余部分现在需要你的数据结构以及如何打印。IMHO应该包含在数据类中,所以您只需执行

打印mylist
即可获得所需的结果

如果你将这一点与mgilson关于使用词典的建议结合起来(我甚至建议使用OrderedDict),我会这样做:

from collections import OrderedDict

class MyList(list):
    def __init__(self, *args):
        list.__init__(self, list(args))

    def __str__(self):
        return '---'.join(self)

class MyDict(OrderedDict):
    def __str__(self):
        ret_val = []
        for k, v in self.iteritems():
            ret_val.extend((k, str(v)))
        return '\n'.join(ret_val)

mydata = MyDict([
    ('a', MyList("1","2","3","4")),
    ('b', MyList("5","6","7","8")),
    ('c', MyList("9","10","11","12")),
])

print mydata

不需要程序的其他部分知道打印这些数据的细节。

不需要,你可以在mylist中为name,lst编写
:print name
,而不是索引,但我认为这是另外一个注释——如果这两个列表真的要并排维护,你可能想考虑把它们作为字典保存……谢谢。我一定会探索这个选项。谢谢你的回答。还有一个问题,是否有类似python doc之类的网站,我可以在其中查找
最佳python实践
@Noob这是PEP 8 python风格指南,以防您以前没有看过: