2017-05-16 8 views
0

座標系のような特定の条件で "X:s"または " - "のどちらかを印刷したいという問題に取り組んでいます。座標系を指定してstrを出力する

考えると2つのリスト:

my_list = [n for n in range(11)] 

coordinates = [3,5,7,8] 

のは、与えられた要素がcoordinatesで、その後Xは、その要素の値のインデックスで印刷されるmy_listであるとしましょう。そのようなマッチが存在しない場所に " - "が表示されます。次coordinatesmy_listを考えると

が起こる: >>> ––X–X–XX

私は今のところ出ているこの何

for n in range(len(coordinates)): 
    if coordinates[n] in my_list: 
     print("–"*(coordinates[n]-(2**n)), end="") 
     print("X", end="") 

これを達成するための最良の方法は何ですか?

+6

あなたはどのような出力を得るのですか?あなたの問題は何ですか?現在ここに質問はありません。 –

答えて

1

印刷する必要がある文字列(len(my_list))の全長を調べ、各インデックスにXまたは - を印刷する必要があるかどうかを確認することをお勧めします。そのような 何か:

for i in my_list: 
    if i+1 in coordinates: 
     print("X", end="") 
    else: 
     print("-", end="") 
print("") # go down a line 
1

はこれを試してみてください、

In [42]: ''.join(['X' if i+1 in coordinates else '-' for i in my_list]) 
Out[42]: '--X-X-XX---' 

とはいたしませんmy_list = [n for n in range(11)]range(11)それの自己の要素のリストは、リストの内包表記の必要はありませんを与えます。

+0

私はそれがOPの望みの出力と一致するように '... if i + 1 in coordinate ... 'とすべきだと思います。 –

+0

@ChristianKönigありがとう、更新、 –

1

あなたは直接文字列にgenetator .joinそれを使用することができます:

my_list = list(range(11)) 
coordinates = [3,5,7,8] 

strg = ''.join('X' if item in coordinates else '-' for item in my_list) 
print(strg) 
+0

'list(range(11))'は必須ですか? –

+1

@hiroprotagonist:nope。試してみましょう: 'a = range(10); a:print(i)のiのために。 a:print(i) 'の中のiのために。 'range 'はイテレータではないので、これは複数回動作します。 –

+0

@ChristianKönigdamn!あなたが正しいです!ありがとう...しかし、私はまだ 'my_list'という変数のリストコンストラクタを持っている方が好きです。 –

関連する問題