2017-06-17 14 views
0

私はPythonの初心者です。python list値の取得範囲外の位置の確認

私はリストをPythonで持っています。それから私は、リストの各位置でデータを印刷したいが、この位置が空の場合は空白に置き換えます

["abcd", "12", "x"] => "a1xb2 c d " 

は、私はそれぞれの位置にデータを検証するためのループを作ることだと思います。しかし、リスト内の位置が空の場合、範囲外のインデックスの間違いを取得したため、検証を行うことはできません。検証を行うことは不可能です。

リストの範囲内でリストの値を取得するにはどうすればよいでしょうか?

答えて

0

izip_longestitertoolsはあなたの友人です。これは、最も長い反復可能(ここでは文字列)を使用して所望の空間に設定することができフィル値によって不足している文字を置き換える:

from itertools import izip_longest 

def f(strings): 
    return ''.join(
     map(lambda x: ''.join(x), izip_longest(*strings, fillvalue=' ')) 
    ) 


a = ["abcd", "12", "x"] 

print(repr(f(a))) 

結果:

'a1xb2 c d ' 

chain代わりmapの持つ変種第2のjoin。配列aに適用される最後の方法の

def f(strings): 
    return ''.join(
     chain(*izip_longest(*strings, fillvalue=' ')) 
    ) 

中間ステップ:

from pprint import pprint 

a1 = izip_longest(*a, fillvalue=' ') 
print('# After izip_longest:') 
pprint(list(a1)) 

print('# After chain:') 
a1 = izip_longest(*a, fillvalue=' ') 
a2 = chain(*a1) 
pprint(list(a2)) 

a1 = izip_longest(*a, fillvalue=' ') 
a2 = chain(*a1) 
a3 = ''.join(a2) 
print('# Result:') 
pprint(a3) 

結果:

# After izip_longest: 
[('a', '1', 'x'), ('b', '2', ' '), ('c', ' ', ' '), ('d', ' ', ' ')] 
# After chain: 
['a', '1', 'x', 'b', '2', ' ', 'c', ' ', ' ', 'd', ' ', ' '] 
# Result: 
'a1xb2 c d ' 
+0

ああ、ありがとう、私は新しく、私はPythonでこれ以上のことを学ぶ必要があることを知っています。 – Paul

+0

@Paul Python [documentation](https://www.python.org/doc/)は既にかなり良いです。 –

0

あなたは、ここでの唯一の最も簡単なPythonの構造を用いて溶液のPythonの新機能しているので、 、Zen of Pythonより複雑なものよりも単純です

SOに新人として
from __future__ import print_function 

str_ = ["abcd", "12", "x"] 

max_len = max(len(i) for i in str_) 
out = "" 

for i in range(max_len): 
    for j in str_: 
     try: 
      out += j[i] 
     except IndexError: 
      out += " " 

print(out) 

、私はあなたがhttps://stackoverflow.com/help/on-topichttps://stackoverflow.com/questions/how-to-ask、およびhttps://stackoverflow.com/help/mcveを読むことをお勧め。

+0

ありがとうございます、私はあなたのヒントのためにこのソリューションがとても好きです。 – Paul

関連する問題