【发布时间】:2020-05-02 13:40:53
【问题描述】:
最近我开始学习 Python 进行研究,我来自 JS,前端 UI/UX Web 开发,所以你可以想象这一切对我来说都是一个全新的概念。
我刚刚进入数据和元组的世界,它似乎是数据世界中一个非常重要的概念,JS 缺乏对元组的语法支持,但是它有 map 和 set 并管理访问数据const 和 let 在我看来,对元组的支持将丰富 JS 编程体验。
我对终端和从命令行打印所有内容非常满意,我一点也不喜欢交互模式或 Jupyter,我想我失去了控制。
但是今天我遇到了一个新手问题
让我们从这个基本示例开始,我认为这是我们需要元组列表时通常应该打印的内容:
## I will create a list of tuples
coordinates = [(1,2),(3,4),(5,6)]
for (x,y) in coordinates :
print(x,y)
## The Result:
1 2
3 4
5 6
现在让我们尝试一个“函数”示例,这是我的问题:
这里的问题是 return 只给了我们一个元组,并且元组类型不在列表中:
import random
def AllX() :
low = 10
high = 90
mini = 20
maxi = 50
coordinates = [(random.randint(low, high), random.randint(mini, maxi)) for k in range(10)]
coordinates += [(1,2),(3,4),(5,6)]
for (x,y) in coordinates :
# run = x,y
return (x,y)
print(AllX())
## The Result:
(79, 45)
如果我使用 print 而不是 return 我会得到下一个结果:
## The Result:
76 28
11 49
60 23
78 33
49 44
77 46
56 45
31 25
17 23
53 22
None
但这不是我们真正期望的,我们需要一个列表,因为(就像随机示例一样)如果我们想在其他情况下使用此函数,我们需要返回该列表。
还有一个问题是我对列出元组甚至循环的逻辑的理解是,如果我们使用相同的函数,但让我们尝试使用 return 循环相同的函数:
generator = AllX()
for item in generator :
print(item)
Result 将只返回 2 个属于随机元组的数字:
## The Result:
27
33
希望有人能给我一些指导或解释,说明为什么/如何在return 中发生这种情况,以及为什么如果我们要迭代相同的函数,结果会是这样
【问题讨论】:
-
其实你的问题太长了,你能告诉我预期的输出是什么。
-
您的问题是
return (x,y)返回第一个坐标(即您没有完成 for 循环)。如果你想返回坐标,你可以使用return coordinates。 -
您的预期输出是结果 1 或结果 2,
result 1= [(14, 38), (74, 48), (70, 25), (83, 27), (69, 23), (13, 49), (67, 21), (78, 24), (72, 49), (80, 31), (1, 2), (3, 4), (5, 6)]result 2 = [14, 74, 70, 83, 69, 13, 67, 78, 72, 80, 1, 3, 5]