2017-05-25 15 views
2

したがって、整数のリストを繰り返し処理し、それらの整数をインデックスとして文字列を出力する関数を作成する必要があります。このような何か:リストをループして文字列の要素を出力する

printString('123456789',[1,7,5,3]) 
2 
8 
6 
4 

私はこの持っている:

def printString(s,list): 
    i=0 
    resultString=str() 
    for i in range(len(list)): 
     resultString= s[list[i]] 
     i=i+1 
    print (resultString) 

をしかし、それは、文字列の最初の文字だけを印刷し、私はforループに問題があると思い、私はできませんそれが何であるかを調べる。

助けが役に立ちます!ありがとう

+1

ループ自体を改善することができます。範囲(len(list))に続いて 'list [i]'の代わりに 'for i in list '。インデックスを作成してアイテムを取得するための範囲を作成する必要はありません。ループ構造がそれを行います。 – dsh

+0

あなたのコードに関する追加の注記: 'i = 0'は意味がありません。ループで' i'を再利用すると値は上書きされます。 'resultString = str()'の行は、変数を使用する前にループ内の 'resultString'に再割り当てするので、目的を果たせません。最後に、文「i = i + 1」は、ループ構成によって「i」が上書きされるため、目的を果たさない。したがって、プログラムの結果に変更を加えることなく、これらの3行を削除することができます。 – dsh

答えて

1

移動print(resultString)ループ内に入るようにしてください。

def printString(s,list): 
    i=0 
    resultString=str() 
    for i in range(len(list)): 
     resultString= s[list[i]] 
     i=i+1 
     print (resultString) 

追加が、非本質的なアドバイス:

forループはすでにあなたのために価値を創造し、インクリメントの作業を行いますので、あなたは、i=0またはi=i+1を必要としません。 Pythonはその型がどうあるべきかについて何らのヒントなしで関数の途中で新しい変数を作成するために完全に満足しているので、

def printString(s,list): 
    resultString=str() 
    for i in range(len(list)): 
     resultString= s[list[i]] 
     print (resultString) 

あなたはresultString=str()は必要ありません。

def printString(s,list): 
    for i in range(len(list)): 
     resultString= s[list[i]] 
     print (resultString) 

あなたは一度だけ、その値を使用しているので、あなたは、必ずしもすべてでresultStringを必要としません。

def printString(s,list): 
    for i in range(len(list)): 
     print (s[list[i]]) 

それはあなたがインデックスの特定のニーズを持っていない場合は、むしろその指標よりも、リストの要素を反復処理することが望ましいです。

def printString(s,list): 
    for idx in list: 
     print (s[idx]) 

組み込み型の名前と同じ変数名を使用しないでください。この結果に

def printString(s,seq): 
    for idx in seq: 
     print (s[idx]) 
2

機能:

printString('123456789',[1,7,5,3]) 
2 
8 
6 
4 

は、多くの方法で実現することができるが、これは私がそれを行うだろうかです。

def printString(input, indexArr): 
    for i in indexArr: 
    print(input[i]) 

printString('123456789',[1,7,5,3]) 

Live Demo

0

あなたは文字列にすべての結果を追加していないので、それはだ、これはあなたを与えるだろう答え:2864

def printString(s,list): 
    i=0 
    resultString=str() 
    for i in range(len(list)): 
     resultString+=s[list[i]] 
     i=i+1 
    print (resultString) 

printString('123456789',[1,7,5,3]) 
0

いくつかの問題がここにあります。まず、printステートメントはループ内でインデントする必要があります。第二に、ここでは無害ですが、自分でiを操作しないでください。forループをそのままにしておいてください。最後に、listは変数の恐ろしい名前です。これはPythonのビルトインリストを隠すためです。一緒にそれをすべて持ってきて、あなたはこのような何かを得るだろう:

def printString(s, lst): 
    for i in range(len(lst)): 
     resultString = s[lst[i]] 
     print (resultString) 
0

を考えると、あなたの引数をテストケースとして:

#!/usr/bin/python 

def printString(strng, indexes): 
    return ''.join((c for i,c in enumerate(strng) if i in indexes)) 

これはenumerate()と発電機を使用しています。

0

printステートメントをforループの中に置くだけで済みます。それは毎回オーバーライドされるため、最後の要素のみを印刷しています。

関連する問題