How to use a return statement in a for loop?
Solution 1
Using a return
inside of a loop will break it and exit the function even if the iteration is still not finished.
For example:
def num():
# Here there will be only one iteration
# For number == 1 => 1 % 2 = 1
# So, break the loop and return the number
for number in range(1, 10):
if number % 2:
return number
>>> num()
1
In some cases we need to break the loop if some conditions are met. However, in your current code, breaking the loop before finishing it is unintentional.
Instead of that, you can use a different approach:
Yielding your data
def show_todo():
# Create a generator
for key, value in cal.items():
yield value[0], key
You can call it like:
a = list(show_todo()) # or tuple(show_todo())
or you can iterate through it:
for v, k in show_todo(): ...
Putting your data into a list or other container
Append your data to a list, then return it after the end of your loop:
def show_todo():
my_list = []
for key, value in cal.items():
my_list.append((value[0], key))
return my_list
Or use a list comprehension:
def show_todo():
return [(value[0], key) for key, value in cal.items()]
Solution 2
Use a generator syntax (excellent explanation on SO here):
def show_todo():
for key, value in cal.items():
yield value[0], key
for value, key in show_todo():
print(value, key)
Solution 3
You can never iteratively return something. Just return a list and iterate over it to get the result.
def show_todo():
return [key, val for key, val in cal.items()]
Related videos on Youtube
Eric.L
Updated on July 09, 2022Comments
-
Eric.L almost 2 years
So I am working on a chat-bot for discord, and right now on a feature that would work as a todo-list. I have a command to add tasks to the list, where they are stored in a dict. However my problem is returning the list in a more readable format (see pictures).
def show_todo(): for key, value in cal.items(): print(value[0], key)
The tasks are stored in a
dict
calledcal
. But in order for the bot to actually send the message I need to use areturn
statement, otherwise it'll just print it to the console and not to the actual chat (see pictures).def show_todo(): for key, value in cal.items(): return(value[0], key)
Here is how I tried to fix it, but since I used
return
the for-loop does not work properly.So how do I fix this? How can I use a
return
statement so that it would print into the chat instead of the console?-
Nimeshka Srimal almost 7 yearsYou can call a function within the for loop without directly printing or returning the value
-
-
Eric.L almost 7 yearsHow would I extract the data? If i use print(show_todo()[0]) it'd print out ['Science', 'Friday']. How do I remove those brackets? Sorry, but I'm really new to python and programming in general.
-
Chiheb Nexus almost 7 years
print()
will only print. But instead of using print, usemy_list.append(...)
. In other words append what'll print in a list then return it. -
wjandrea almost 4 yearsSimpler:
return list(cal.items())