:このpythonリストの理解に何が問題なのですか?私はリストの内包で遊んで、これに出くわした
h = [ b for b in range(1, 9) for k in range(b, b*10) if k%2==0 for j in range(2*k, k*k)]
期待される結果:
h = [1, 2, 3, 4, 5, 6, 7, 8]
予想通りの実績ではありませんが、len(h) = 196000
項目が含まれています。
どうすればいいですか?
:このpythonリストの理解に何が問題なのですか?私はリストの内包で遊んで、これに出くわした
h = [ b for b in range(1, 9) for k in range(b, b*10) if k%2==0 for j in range(2*k, k*k)]
期待される結果:
h = [1, 2, 3, 4, 5, 6, 7, 8]
予想通りの実績ではありませんが、len(h) = 196000
項目が含まれています。
どうすればいいですか?
なぜこれが期待される結果だと思いますか?
h = []
for b in range(1, 9):
for k in range(b, b*10):
if k%2==0:
for j in range(2*k, k*k):
h.append(b)
ので、1から8までの各数値のために、それはリストあなたはまた、それぞれの番号がある回数を確認することができます
に何回もそれを追加します:
あなたのコードは同等ですgroupbyの助けを借りて追加されました:
>>> for i,j in itertools.groupby(h):
print(i, sum(1 for i in j))
1 80
2 960
3 3640
4 9120
5 18392
6 32472
7 52328
8 79008
あなたはそれのようなトリッキーな構文それは私を混乱させた。ありがとう:) –
あなたのリストのcompがこれに相当します
h = []
for b in range(1, 9):
for k in range(b, b * 10):
if k % 2 == 0:
for j in range(2 * k, k * k):
h.append(b)
だから、おそらくそれは、ネストされたリストの内包のループのためのあなたの理解が間違っていただけです。
ループを精通している順番にループを精密に展開します(または、トリプルネストされた理解を完全に避ける - 理解できなくなる癖があります)。
'h = [bは範囲(1,9)に]'あなたの期待した結果を与えるでしょう。他のすべてのものは何をしていると思いますか? – Ben
私はちょうど実験していました、そして、私はjの代わりにbを使いました。しかし、その結果は予期せぬものとなった。 –
'python 2.xで[bの範囲(1,9)] ==範囲(1、9)'で – wim