0

わかりました、私は Python が初めてで、タプルとリストについて学んでいます。プログラムを作成するように依頼されましたが、次のリストを変換する必要があります。

    li = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]

次のようなリストに追加します。

    li = [[(1,2,3),(4,5,6)],[(7,8,9),(10,11,12)],[(13,14,15),(16,17,18)]

基本的に、単純なリストから、3 つの要素を含む 2 つのタプルを含むサブリストを含むリストまでです。

私はあなたの助けに感謝します。

ありがとう。

4

4 に答える 4

2

私は個人的にこのアプローチが好きです:

>>> li = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
>>> 
>>> v = iter(li)
>>> li = [(i, next(v), next(v)) for i in v]  # creates list of tuples
>>> 
>>> v = iter(li)
>>> li = [[i, next(v)] for i in v]  # creates list of lists of tuples
>>> 
>>> li
[[(1, 2, 3), (4, 5, 6)], [(7, 8, 9), (10, 11, 12)], [(13, 14, 15), (16, 17, 18)]]

ちなみに、要素がそのような構造に収まらない場合、これはエラーを発生させます。たとえば、次のことを考慮してください。

>>> l = [1, 2, 3]
>>> v = iter(l)
>>> 
>>> [(i, next(v)) for i in v]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

これは適切な場合とそうでない場合があります。

そうでない場合、簡単な回避策はnext()2 番目の引数を与えることです。

>>> l = [1, 2, 3]
>>> v = iter(l)
>>> 
>>> [(i, next(v, None)) for i in v]
[(1, 2), (3, None)]

参照:

于 2013-09-26T23:01:20.423 に答える
0

与えられた

li = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]

次の方法でアイテムをグループ化できますzip(*[iter(li)]*3)

zip(*[iter(li)]*3)
#>>> <zip object at 0x7f0a5578ca28>

そしてチェック:

list(zip(*[iter(li)]*3))
#>>> [(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12), (13, 14, 15), (16, 17, 18)]

そして、次zip(*[...]*2)のことができますzip(*[iter(li)]*3)

zip(*[zip(*[iter(li)]*3)]*2)
#>>> <zip object at 0x7f0a5578c998>

そしてチェック:

list(zip(*[zip(*[iter(li)]*3)]*2))
#>>> [((1, 2, 3), (4, 5, 6)), ((7, 8, 9), (10, 11, 12)), ((13, 14, 15), (16, 17, 18))]

内側の項目はリストではないため、次のようmapにします。

map(list, zip(*[zip(*[iter(li)]*3)]*2))
#>>> <map object at 0x7f0a5afd80d0>

そしてチェック:

list(map(list, zip(*[zip(*[iter(li)]*3)]*2)))
#>>> [[(1, 2, 3), (4, 5, 6)], [(7, 8, 9), (10, 11, 12)], [(13, 14, 15), (16, 17, 18)]]
于 2013-09-26T23:00:42.393 に答える