[英]Better way to know if there are any elements left to iterate in for loop in Python
我有以下for循環:
def validate(request, fields=None):
i = 0
j = len(fields)
return_fields = []
for f in fields:
i += 1
if request.data[f] != check_validity(f)
if i == j:
return_fields.append(f)
return return_fields
else:
return_fields.append(f)
這通過某些函數check_validity()檢查字段的有效性。 如果無效,則將其附加到return_fields列表中,最后將其返回給主調用方。 我的問題是,在我的代碼中,我使用兩個變量i和j只是檢查列表“字段”中是否還有任何元素。 但是我只是想知道是否有更好的方法來執行相同的操作,因為我想返回所有無效字段,並且在遇到其中任何一個無效字段時都不要停止。
另一種方法是使用枚舉 :
def validate(request, fields=None):
return_fields = []
for i, f in enumerate(fields):
if request.data[f] != check_validity(f)
if i+1 == len(fields):
return_fields.append(f)
return return_fields
else:
return_fields.append(f)
但是我不明白,為什么你需要知道它? 為什么你不能只是:
def validate(request, fields=None):
for f in fields:
if request.data[f] != check_validity(f)
return_fields.append(f)
return return_fields
簡寫:
def validate(request, fields=None):
return [
f for f in fields
if request.data[f] != check_validity(f)
]
for循環在整個數組中進行迭代時會自動完成,因此您只需將return
從for循環中取出,一旦對字段中的所有元素進行了迭代,它將立即運行。
def validate(request, fields=None):
return_fields = []
for f in fields:
if request.data[f] != check_validity(f)
return_fields.append(f)
return return_fields
def validate(request, fields=None):
return_fields = []
buggy = False
for f in fields:
if request.data[f] != check_validity(f)
buggy = True
return_fields.append(f)
if buggy: return return_fields
順便說一句,在您的代碼中,僅當最后一個字段無效時,它才會返回return_fields。
我想使用yield將對您有用:)(在這里看看“ yield”關鍵字在Python中有什么用? ,它相對復雜,但是就像在不重新啟動函數的情況下一樣)
def validate(request, fields=None):
for f in fields:
if request.data[f] != check_validity(f):
yield (f)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.