当list len达到5时中断循环(In表示循环)



我正在构建一个简单的python程序,并试图根据限制过滤一些响应,以运行for循环或while循环。

我想做什么

当列表len达到5时,我正试图停止循环。它可以是for循环和while循环。

views.py

def filter_array(request):
new_array = []
count = 1
quit = False

for m in res.get("blogs"):
for likes in m.get("likes"):
try:
count += 1
if likes == "user_1":
new_array.append(likes)
if count == 5:
quit = True
break
except:
quit = True
break
print(new_array)
return new_array

views.py 中的json响应

res = {
"blogs": [
{
"title": "Blog 1",
"description": "Blog description",
"likes": [
"user_1",
"user_2",
]
},
{
"title": "Blog 2",
"description": "Blog description",
"likes": [
"user_4",
"user_5",
]
},
{
"title": "Blog 3",
"description": "Blog description",
"likes": [
"user_3",
]
},
{
"title": "Blog 4",
"description": "Blog description",
"likes": [
"user_3",
"user_4",
"user_5",
]
},
{
"title": "Blog 5",
"description": "Blog description",
"likes": [
"user_4",
"user_5",
]
},
]
}

当我运行上面的代码时,它会附加数组中的所有json项。但如果";点赞">user_1,当列表len达到5时停止循环。

我试了好几个小时,但还是没用。

任何帮助都将不胜感激。

我不确定你到底想做什么,但据我所知,试试这个:

def filter_array(request):
new_array = []
count = 1
flag = False
for m in res.get("blogs"):
for likes in m.get("likes"):
try:
count += 1
if likes == "user_1":
new_array.append(likes)
if count == 5:
flag = True
break
except:
flag = True
break
if flag: # break if flag is True
break
print(new_array)
return new_array

更改

  1. 使用flag而不是quit,因为quit()是内置函数
  2. 在循环的外部添加了标志检查

break仅中断一个循环。因为在第一个循环中嵌套了第二个循环,所以需要另一个break

def filter_array(request):
new_array = []
count = 1

for m in res.get("blogs"):
for likes in m.get("likes"):
count += 1
if likes == "user_1":
new_array.append(likes)

if count == 5:
break
if count == 5:
break
print(new_array)

return new_array

IIUC这就是您所需要的:

res = {
"blogs": [
{
"title": "Blog 1",
"description": "Blog description",
"likes": [
"user_1",
"user_2",
]
},
{
"title": "Blog 2",
"description": "Blog description",
"likes": [
"user_4",
"user_5",
]
},
{
"title": "Blog 3",
"description": "Blog description",
"likes": [
"user_3",
]
},
{
"title": "Blog 4",
"description": "Blog description",
"likes": [
"user_3",
"user_4",
"user_5",
]
},
{
"title": "Blog 5",
"description": "Blog description",
"likes": [
"user_4",
"user_5",
]
},
]
}
new_list = []
for dict_ in res['blogs']:
if 'user_1' in dict_.get('likes', []):
new_list.append(dict_)
if len(new_list) == 5:
break
print(new_list)

输出:

[{'title': 'Blog 1', 'description': 'Blog description', 'likes': ['user_1', 'user_2']}]

您可以通过切片获得列表的前五个元素。类似这样的东西:

def filter_array(request):
all_likes = []
for likes in m.get("likes", [])
all_likes.extend(likes)
return all_likes[:5]

不要让事情变得过于复杂。例如,这里没有try...except的理由。

最新更新