4

私はこのようなlistとを持っていますlist of list

>>> list2 = [["1","2","3","4"],["5","6","7","8"],["9","10","11","12"]]
>>> list1 = ["a","b","c"]

上記の 2 つのリストを圧縮して、インデックスごとに値のインデックスを照合できるようにしました。

>>> 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)可能な方法なのかということです。

4

5 に答える 5

8

まあ、いくつかの一時変数を避けて、より良いループを使用することができます:

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

ただし、根本的に「より良い」ものは得られないと思います。

于 2012-05-25T19:05:09.560 に答える
5

次のforループは、印刷操作と結合操作の両方を 1 行に結合します。

 for item in zip(list1,list2):
     print '{0}\n{1}'.format(item[0],'---'.join(item[1]))
于 2012-05-25T19:07:27.827 に答える
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
于 2012-05-25T19:11:15.893 に答える
2

あなたがクリーンだと思うかもしれませんが、私はそうではありませんが、プログラムの残りの部分は、データの構造とその印刷方法を理解する必要があるということです。データのクラスに含まれている必要があるIMHO 。これ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

プログラムの残りの部分で、このデータの印刷の詳細を知る必要はありません。

于 2012-05-25T19:50:45.393 に答える
2

結果を達成する別の方法を次に示します。短いですが、読みやすいかどうかはわかりません。

print '\n'.join([x1 + '\n' + '---'.join(x2) for x1,x2 in zip(list1,list2)])
于 2012-05-25T19:19:16.103 に答える