需要一些python数组的解释

本文关键字:数组 解释 python | 更新日期: 2023-09-27 18:02:09

我正在将python算法转换为c#,我需要一些解释。所以我有这个列表的列表:

offsets2 = [[(0.1, 0.1), (0.5, 0.1), (0.9, 0.1), (1.1, 0.1)],
            [(0.1, 0.5), (0.5, 0.5), (0.9, 0.5), (1.1, 0.5)],
            [(0.1, 0.9), (0.5, 0.9), (0.9, 0.9), (1.1, 0.9)],
            [(0.1, 1.0), (0.5, 1.0), (0.9, 1.0), (1.1, 1.0)]]

和this:

for offset in offsets2:
    offset = [(int(x + lane.width * dx), 
               int(y + self.canvas.row_height * dy))
              for dx, dy in offset]

我想知道dx和dy是什么?我猜是x和y,但只是想确定一下,并问一下如何在c#中获得它们

需要一些python数组的解释

代码使用所谓的List Comprehension

大致翻译为:

for offset in offsets2:
    _tmp = []
    for dx, dy in offset:
        _tmp.append((int(x + lane.width * dx), 
                     int(y + self.canvas.row_height * dy))
    offset = _tmp

offset包含两个元组,表达式for dx, dy in offset在迭代时解包这些元组。这就相当于:

for coord in offset:
    if len(coord) != 2:
        raise ValueError
    dx = coord[0]
    dy = coord[1]
    ...

你可以输入print语句来查找你想要的内容。

for offset in offsets2:
    print offset
    tmp = []
    for dx, dy in offset:# for each pair (dx,dy) of offset
        print dx, dy
        newCoords = (int(x + lane.width * dx), 
               int(y + self.canvas.row_height * dy))
        tmp.append(newCoords)
    offset = tmp[:]
>>> [(0.1, 0.1), (0.5, 0.1), (0.9, 0.1), (1.1, 0.1)]
>>> 0.1, 0.1
>>> 0.5, 0.1
>>> 0.9, 0.1
....
>>> [(0.1, 0.5), (0.5, 0.5), (0.9, 0.5), (1.1, 0.5)]
>>> 0.1, 0.5
>>> 0.5, 0.5
>>> 0.9, 0.5

dxdy只是临时变量,分配给列表中的每一组值。第一次迭代是dx=0.1, dy=0.1,第二次是dx=0.5, dy=0.1,等等