首页 > 解决方案 > 坐标列表列表

问题描述

我是 Python 新手,正在努力完成一项我认为对于有经验的程序员来说非常简单的任务。

我正在尝试为不同的行创建坐标列表列表。例如:

list = [ [(x,y), (x,y), (x,y)], [第 2 行坐标], ....]

我有以下代码:

masterlist_x = list(range(-5,6))

oneline = []

data = []

numberoflines = list(range(2))

i = 1 

for i in numberoflines: 

    slope = randint(-5,5)
    y_int = randint(-10,10)


    for element in masterlist_x: 

       oneline.append((element,slope * element + y_int))

    data.append(oneline)

应该将坐标保存到一行(oneline)的变量的输出包含两行:

输出

我知道这是外部循环机制的问题,但我不确定如何进行。

非常感谢任何和所有帮助。非常感谢!

标签: python

解决方案


@khuynh 是对的,你只是oneline = []在错误的地方,你把所有的坐标放在一行中。

此外,您的代码中有一些不必要的东西:

  • 你不需要list()range()你可以直接用for
  • 你也不需要声明ifor the for,它自己做
  • i实际上并没有使用,这很好。未使用变量的 Python 约定是_

固定版本:

from random import randint

masterlist_x = range(-5,6)
data = []
numberoflines = range(2)

for _ in numberoflines: 
    oneline = []

    slope = randint(-5,5)
    y_int = randint(-10,10)

    for element in masterlist_x: 
       oneline.append((element,slope * element + y_int))

    data.append(oneline)

print(data)

也可以在线运行它:https ://repl.it/repls/GreedyRuralProduct

我怀疑整个事情也可以用更少的代码来完成,并且以更简单的方式,作为列表理解..

更新:内部循环确实非常适合列表理解。也许外部也可以做成一个,整个事情可以有两个嵌套的列表推导,但我只是在尝试时感到困惑。但这很清楚:

from random import randint

masterlist_x = range(-5,6)
data = []
numberoflines = range(2)

for _ in numberoflines: 
  slope = randint(-5,5)
  y_int = randint(-10,10)

  oneline = [(element, slope * element + y_int)
             for element in masterlist_x]

  data.append(oneline)

print(data)

再次在 repl.it 上:https ://repl.it/repls/SoupyIllustriousApplicationsoftware


推荐阅读