【问题标题】:List of Tuples in a function explained函数中的元组列表解释
【发布时间】:2020-05-02 13:40:53
【问题描述】:

最近我开始学习 Python 进行研究,我来自 JS,前端 UI/UX Web 开发,所以你可以想象这一切对我来说都是一个全新的概念。

我刚刚进入数据和元组的世界,它似乎是数据世界中一个非常重要的概念,JS 缺乏对元组的语法支持,但是它有 mapset 并管理访问数据constlet 在我看来,对元组的支持将丰富 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]

标签: python list tuples


【解决方案1】:

return 语句立即返回并退出函数。如果你在循环中调用return,它只会返回循环中的项目,循环不会继续。

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)]
    return coordinates

【讨论】:

    【解决方案2】:

    result list 将给出所有 X,coordinates list 将给出 x 和 y。

    import random
    def AllX():
        low = 10
        high = 90
        mini = 20
        maxi = 50
        result = []
        coordinates = [(random.randint(low, high), random.randint(mini, maxi)) for k in range(10)]
        coordinates += [(1,2),(3,4),(5,6)]
        print(coordinates)
        for (x,y) in coordinates:
            # run = x,y
            result.append(x)
        return result
    print(AllX())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-06
      • 2019-02-23
      • 2021-04-05
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2021-05-28
      • 2021-10-31
      相关资源
      最近更新 更多