アプリ版:「スタンプのみでお礼する」機能のリリースについて

for i in nums
てするのはパイソンで、
for i in range(len(nums))
みたいなことを後ろで一回通してますか?
それだったらindexで触れる後者の方で基本的に良いですか??

A 回答 (7件)

for .. in obj はobjの__iter__() でイテレータを作成して


ループを回します。

objが配列なら、配列の各要素を先頭からなめてゆくイテレータでループを回します。

rangeは初期値、終了値、ステップだけを保持するシーケンスで
配列では無いです。これのイテレー夕はインデックス値をゼロから増やしながら、初期値+インデックス値×ステップを返します。

因みに、objは __iter__()メソッドが実装されていれば良いのでシーケンス(配列のようにアクセスできるオブジェクト)である必要はありません。
なのでlenは使いません。
    • good
    • 1
この回答へのお礼

ありがとう

ありがとうございます

お礼日時:2024/05/12 18:24

どこまでが仕様で、どこからが処理系依存なのかは、ようわからんのやけど、


近年の python では、range は遅延評価になってるみたいですね。↓
https://blog.xoxzo.com/ja/2017/12/25/about-lazy- …

だとしたら、
for i in range(len([0,1,2,3,4,5,6,7,8,9])) と
for i in [0,1,2,3,4,5,6,7,8,9] では
処理は違う ということになりそうです。
len(nums) が小さいと差は判らないけれど、
nums = range(n) の n が非常に大きかったりすると
挙動に差が出ますね。
    • good
    • 0
この回答へのお礼

ありがとう

勉強になりましたʕ•̀ω•́ʔ✧
ありがとうございます

お礼日時:2024/05/12 18:24

考えが逆です。



Python の for は「(リストとかタプルのような)列に並んでいるデータ(sequence)を順番に処理する」もので、
他言語のような「数値を変化させつつ順番に処理する」機能ではない。

他言語のようなforを実現する方法が「数値を変化させつつ順番に並んでいるデータ」をrangeで作り、それをforで順番に処理する、というもの。
    • good
    • 0
この回答へのお礼

ありがとう

なるほど。。すごい面白いと思いました。ありがとうございます

お礼日時:2024/05/11 22:56

すいません、pythonに詳しくないんです。

同じ意味じゃないんですね。間違えました。
処理系依存というのはコンパイラやインタプリタによって一回通してる処理をしてるのか独自の処理をしているのかが変わるってことです。
    • good
    • 0
この回答へのお礼

ありがとう

そなんですね〜。インタプリタとかかんがえたことなかたです

お礼日時:2024/05/11 22:55

numsが0から始まる連続した整数なら同じですが、そうでなければ異なるのではないでしょうか

    • good
    • 0
この回答へのお礼

どう思う?

どういう意味でおっしゃってますか?

お礼日時:2024/05/11 20:57

numus = [ 1, 3, 5, 7, 11 ] だったりしたら、


for i in nums と
for i in range(len(nums)) では
現れる i は違うよね。
    • good
    • 0
この回答へのお礼

ありがとう

それはそうですけど、質問は

for i in range(len(nums))

はうしろでfor i in nums
みたいなことを結局してるか?
計算量はどうか?
の2つです。
コンピュータの仕組みに興味があります

お礼日時:2024/05/11 20:52

どう変換してるかは処理系依存じゃないですか?


どちらも同じ意味だと思います。
    • good
    • 0
この回答へのお礼

ごめんなさい、処理依存系ってなんですか??

お礼日時:2024/05/11 20:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A