我有list
和list of 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', ['5', '6', '7', '8']), ('c', ['9', '10', '11', '12'])]
现在我尝试使用
打印上述mylist
的输出
>>> for item in mylist:
... print item[0]
... print "---".join(item[1])
...
导致此输出为desired output
。
a
1---2---3---4
b
5---6---7---8
c
9---10---11---12
现在,我的问题是有更多cleaner and better
方式来实现我想要的输出,或者这是best(short and more readable)
可能的方式。
答案 0 :(得分:8)
好吧,你可以避免一些临时变量并使用更好的循环:
for label, vals in zip(list1, list2):
print label
print '---'.join(vals)
我认为你不会从根本上获得任何“更好”的东西。
答案 1 :(得分:5)
以下for
循环将打印和连接操作合并为一行。
for item in zip(list1,list2):
print '{0}\n{1}'.format(item[0],'---'.join(item[1]))
答案 2 :(得分:3)
它可能不如完整循环解决方案那么可读,但以下内容仍然可读且更短:
>>> 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
答案 3 :(得分:2)
这是实现结果的另一种方法。它更短,但我不确定它更具可读性:
print '\n'.join([x1 + '\n' + '---'.join(x2) for x1,x2 in zip(list1,list2)])
答案 4 :(得分:2)
您可能认为干净,但我不认为,您的程序的其余部分现在需要您的数据结构以及如何打印它。恕我直言,应该包含在数据类中,这样你就可以print 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
不需要程序的其余部分知道打印此数据的详细信息。