宿題の問題で困っています。
「配列 a を取り、その各要素を (str(a[i]) を使用して) 文字列に変換し、これらすべての文字列を一緒に追加する関数 to_str(a) を作成します。」
これは私が持っているものです
def to_str(a):
for i in a: a.append([i])
return str(a[i])
str(a[i]) の使い方がわかりません。誰かが私を正しい方向に向けることができるかどうか疑問に思っていました
ドキュメントから:
str(オブジェクト) -> 文字列
オブジェクトの適切な文字列表現を返します。引数が文字列の場合、戻り値は同じオブジェクトです。
str(a[i])
の文字列表現を返します。つまり、文字列a[i]
に変換a[i]
します。次に、 のすべての値の文字列を連結する必要がありますi
。
あなたのコードに関しては、次のコメントがあります。
i
a
あなたが考えているかもしれないように、インデックスではなく、の要素です。a
toの要素を追加していますa
(無限に、恐れています)。a[i]
私が言ったようにi
、インデックスではなく要素であるため、例外が発生する可能性があります。また、使用str(a[i])
が厳密に必須でない場合は、非 Pythonic としてスキップすることをお勧めします。これにはインデックスはまったく必要ありません。例:
''.join(str(element) for element in a)
また
''.join(map(str, a))
必要なものを返します。どちらの場合もstr
、 のすべての要素に適用されますa
。
インデックスを使用しない最も簡単な (「初心者向け」) 方法は次のとおりです。
s = ''
for element in a:
s += str(element)
return s
効果的には同じことを行いますが、効率は少し劣ります。
各要素を文字列に変換すると、リスト内包表記を使用するのが最も簡単になります。
[ str(i) for i in a ]
# equivalent to
[ str(a[i]) for i in range(len(a)) ]
# equivalent to
map(str, a) # most concise, use if you want to feel incredibly clever...
したがって、関数を書くことができます:
def to_str2(a):
''.join([str(i) for i in a]) # concatenates the list as a list of strings
.
あなたのコードはほぼこれを行います:
def to_str(a):
new_a = [] # rather than use the same a!
for i in a:
new_a.append(str(i)) #convert i to string before appending
return new_a
すべてのタスク基準を満たすコードは、次のようなものです。
def to_str(a):
return reduce(lambda x, y: x + str(y), a, '')
最初にそれらを文字列に変換し、次にすでに処理された要素から作成された文字列に追加します(最初は空の文字列です)。
EDIT : より明確な (そして Python 3 でサポートされている) 方法は、要素を明示的にループすることです。これはまったく同じことを行い、reduce() がどのように機能するかを同時に明確にします。
def to_str(a):
result = '' # third argument of reduce()
for item in a:
result += str(item) # does what reduce() lambda argument was doing
return result
最も簡単な方法は次のとおりです。
[str(i) for i in a]
関数が必要な場合:
def to_str(a):
return [str(i) for i in a]