【问题标题】:Is it possible to use slice in Python in list of complex objects with field of the object是否可以在 Python 中使用具有对象字段的复杂对象列表中的切片
【发布时间】:2021-12-04 09:31:41
【问题描述】:

我是 Python 新手,正在使用 python3。 我列出了类型点的 og 对象

class Po:
    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y

C = [Po(0, j) for j in range(10)]

和二维数组

m = [[j for i in range(2)] for j in range(10)]

我想将 C 的所有字段 x 分配给 m 中索引为 0 的值

C[:].x = m[:][0]

但是 python 说列表没有字段 x。 我该怎么做以及为什么我不能以这种方式访问​​ x

【问题讨论】:

  • 您使用的是 Python 3;您不太可能专门使用 3.0。
  • C 是一个点列表。你想用它做什么?修改它的 x 值?
  • C[:] 指的是一个列表,C[:].x 正在尝试访问列表中的字段x,您将需要使用支持这种切片列表的 for 循环或库
  • C[:] 基本上是C 的浅拷贝; . 不会“分布”在该列表的每个元素上。
  • 特别检查m[:][0] 在做什么,它并没有像你想象的那样对列进行切片。如果您来自 matlab,您可能会更喜欢使用确实支持这种 slicign 但 idk 的 numpy 数组,如果它也适用于对象字段。

标签: python python-3.x list slice


【解决方案1】:

在 Python 中对此没有特定的语法。您只需要使用常规的for 循环。

for ci, mi in zip(C, m):
    ci.x = mi[0]

【讨论】:

    【解决方案2】:

    您的“C”实例本身就是一个列表,因此为了访问它的 x 或 y 值,您需要先调用索引。因此,您可以通过这种方式访问​​它们:

    for i in range(10):
        print(C[i].x)
        print(C[i].y)
    

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多