0

この二人は全く同じことを言っているではないか。最初の項目を実行すると、リストの最後の項目だけになってしまうのに、2 番目の項目では ["a","b","c"] を取得するのはなぜですか?

content = ["a\n","b\n","c\n"]

for line in content:
    content = line.replace("\n","")

content = [line.replace("\n","") for line in content]
4

5 に答える 5

5

ループでは、名前を文字列forに置き換えています。実際には、 で置き換えられたリストコンテンツの最後の項目は、 name によってポイントされます。content\n''content

2 番目のリスト内包表記では、リストの各項目の最後の文字を で置き換えたリストを作成し、新しいリストを名前に割り当てています。content''content

于 2013-06-16T05:20:26.827 に答える
4

result = [a_func(elem) for elem in a_list]

と同等です

result = []
for elem in a_list:
    result.append(a_func(elem))

したがって、あなたの例では、リスト内包表記に相当するfor ループ

result = []
for line in content:
    result.append(line.replace("\n",""))
于 2013-06-16T05:24:44.840 に答える
1

彼らは同じことを言いません。ループを使用した最初の例では、反復ごとに、リストから単一の項目forに名前を割り当てます( 、一部のテキストを置き換えます)。 毎回上書きされるので、最後の要素だけが最後にあります。2 番目の例では、まったく新しいリストを作成し、それを に割り当てます。contentlinecontentcontent

于 2013-06-16T05:19:27.450 に答える
1

最初のものでは、 content の値を で更新しline.replace("\n", "")ます。これは、コンテンツの各要素で発生し続けます。'c\n' は最後の要素であるため、繰り返しの最後に行の値が 'c\n' になり、それを content に割り当てます。

#Trace of loop
#iteration 1: line = "a\n"
content = line.replace("\n","") (which is 'a')
#iteration 2: line = "b\n"
content = line.replace("\n","") (which is 'b')
#iteration 3: line = "c\n"
content = line.replace("\n","") (which is 'c')

したがって、コンテンツの値は「c」です

2 つ目はリスト内包表記で、次のことを意味します。

[ "a\n".replace("\n",""), "b\n".replace("\n",""), "c\n".replace("\n","") ]

(つまり、この新しいリストの最初の要素はline.replace("\n","")であり、行は内容の最初の要素 ("a\n") を取り、この新しいリストの 2 番目の要素はline.replace("\n","")であり、行は内容の 2 番目の要素 ("a\ n") など)。

于 2013-06-16T05:21:12.520 に答える
0

オリジナルに最も近い修正バージョン:

content = ["a\n","b\n","c\n"]

for i in range(len(content)):
    content[i] = content[i].replace("\n","")
print content

content = ["a\n","b\n","c\n"]
content = [line.replace("\n","") for line in content]
print content

ここで、2 つのブロックは等価です。

于 2013-06-16T05:50:22.373 に答える