2017-05-23 2 views
0

私は約20-30のリスト[strings]のリストを持っています。アイテムの長さに基づいてPythonリストのいくつかのエントリをマージする

私はちょうど良い私のプログラムでそれらをプリントアウトすることができるよ - 私はその2 consecutive itemsを持っている場合、したがって、基本的...

が、私はいくつかのスペースを節約したい、と短くなっている項目をマージしたいです結合された長さが30より小さい場合、それらをリストの1つのエントリとして項目に結合したい - その間に/を持つ

これを行う簡単な方法はありません。それは、すべての内部の1 functionが起こっている

私は同じリストでそれを行う場合は気にし、またはアイテムの新しいリストを作成していない... ...

答えて

1

あなたの要件(サイズ30)を満たすまで、リストをループして項目を結合する必要があります。要素が大きくなると新しいリストに追加します。

l=[] # your new list 
buff=yourList[0] if len(yourList)>0 else "" # hold strings till they reach desired length 
for i in range(1,len(yourList)): 
    # check if concatenating will exceed the size or not 
    t=yourList[i] 
    if (len(buff) + len(t) + 1) <= 30: 
     buff+="/"+t 
    else: 
     l.append(buff) 
     buff=t 
l.append(buff) # since last element is yet to be inserted 
+0

これが近いうちに、最初のアイテムが「/ item」または「」になり、最初のアイテムが30以上だった場合はbuffが空になり、追加されます。自分自身...ちょうどclunkyだった... –

+0

@MusicalCoderそれを指摘してくれてありがとう!コードを編集しました。 –

0

することはできたリストのextend方法は次のとおりです。

a = [1,2,3] 
b = [4,5,6] 

a.append('/') 
a.extend(b) 

あなたは自分の要件に応じて2つのリストa and bのサイズを確認する必要があります。

私はあなたの問題を理解することを願っています!

0

このコードは私のために働いています。あなたが望むものであるかどうかを確認することができますが、それは少し長めですが動作します。

list1 = yourListOfElements 
for elem in list1: 
    try: # Needs try/except otherwise last iteration would throw an indexerror 
     listaAUX = [] # Auxiliar list to check length and join smaller elements. You can probably eliminate this using list slicing 
     listaAUX.append(elem) 
     listaAUX.append(list1[list1.index(elem)+1]) 
     if len(listaAUX[0]) + len(listaAUX[1]) < 30: 
      concatenated = '/'.join(listaAUX) 
      print(concatenated) 
     else: 
      print(elem) 
    except IndexError: 
     print(elem) 
+0

あまりにも - 私は印刷されている別の機能を持っている - それはすべてが言っていると、関数に渡すために完了したときに私は単一のリストが必要... –

関連する問題