【问题标题】:How to assign values in a for loop from a list如何在 for 循环中从列表中分配值
【发布时间】:2016-04-24 15:18:59
【问题描述】:

我有一个矩形的三个顶点,需要找到第四个顶点,我需要为 N 个矩形找到缺失的顶点。

遗憾的是,我不知道如何在第一个矩形之后分配顶点:/。

这是输入的示例文本文件:

2      # '2' is the number of rectangles.
5 5    #        (x1, y1)
5 7    #        (x2, y2)
7 5    #        (x3, y3)
30 20  #        (x1, y1)
10 10  #        (x2, y2)
10 20  #        (x3, y3)
       #   (there could be more '**vertices**' and more than '**2**' cases)

这是我的方法:

import sys

def calculate(num):
  x1 = lines[n].split()[0]
  y1 = lines[n].split()[1]
  x2 = lines[n+1].split()[0]
  y2 = lines[n+1].split()[1]
  x3 = lines[n+2].split()[0]
  y3 = lines[n+2].split()[1]
  print x1, y1
  print x2, y2
  print x3, y3
  #Planning to write codes for calculation & results below inside this function.

readlines = sys.stdin.readlines()    # reads
num = int(lines[0])                  # assigns the number of cases

for i in range(0, num):
  item += 1
  calculate(item)                    # Calls the above function

当我运行这段代码时,我得到以下信息:

5 5
5 7
7 5 

5 7
7 5
30 20 

我想得到的是:

5 5
5 7
7 5

30 20
10 10
10 20

【问题讨论】:

  • 使用itertools 文档页面上显示的grouper 配方,您可以轻松(有效地)以三个为一组来使用您的文件。
  • 这是我第一次在这里注册并发布我的问题。非常感谢您的帮助!
  • 什么是'n?你在哪里申报的?你上面贴的代码好像不完整
  • 我的错。是的,你是对的。它应该是'n'而不是'num'! :)

标签: python loops for-loop assign


【解决方案1】:

你想要的

item += 3

在你的循环中。


再看一遍,这还不足以让它发挥作用。你想传递行号

1, 4, 7, 10 .....

到您的calculate 函数。您可以使用 range 的 3 参数版本来完成此操作

for iLine in range( 1, 3*num-1, 3):
    calculate( iLine)

第三个参数告诉它每次跳过 3,并且您需要从第 1 行而不是第 0 行开始,因为第 0 行包含您的计数。

您还需要正确设置上限。你想要传递给calculate的最终值实际上是3*num-2,但是请记住range函数不包括上限,所以我们可以在那里使用(最高期望值+1),这就是@ 987654329@来自。

【讨论】:

  • 谢谢乔纳森,我试过了,但它给了我一个超出范围的错误。这是我得到的 7 5, 30 20, 10 10
  • 是的,我对循环变量 i 并将变量 item 传递到您的 calculate 函数感到困惑。如果你循环传递给calculate 的同一个变量,就像在我的iLine 示例中一样,我认为它会更清晰。
  • 再次感谢乔纳森。我按照你的建议试过了,效果很好!非常感谢您的帮助!
【解决方案2】:

上面的代码似乎不是你的完整代码,但我认为你应该在你的真实代码中更正它,如下所示: 而不是item +=1,你应该写item = 1+ i*3

【讨论】:

  • 感谢您的帮助!
  • @DavidC 不客气。在 stackoverflow 中,当有人回答您的问题并且您觉得它有帮助时,请喜欢这个答案。谢谢
  • 哦,好的,我很乐意为您提供帮助。怎么点赞?我现在点击了向上箭头! :) 谢谢。
  • 您可以通过点击我答案左侧的向上箭头来点赞
  • 我已经这样做了,当我点击它时,它说我需要拥有超过 15 个声望才能公开展示它。我不确定这算不算。不管怎样,谢谢你的帮助!
【解决方案3】:

@Avilar - 这就是num > 2 时代码中发生的情况 你的代码建议是这样的:

item = 1
for i in range(0, num):
   item += i*3

当我们通过循环时

i = 0
item += 0 --> item = 1

然后

i = 1
item += 3 --> item = 4

然后

i = 2
item += 2*3 --> item = 10

然后

i = 3
item += 3*3 --> item = 19

然后

i = 4
item += 3*4 --> item = 31

您将生成数字

1, 4, 10, 19, 31, 46, 64

当我们需要时

1, 4, 7, 10, 13, 16, 19

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2015-06-14
    相关资源
    最近更新 更多