【问题标题】:Python list of object extraction into sub list对象提取到子列表的Python列表
【发布时间】:2020-08-17 09:41:45
【问题描述】:

假设我有一个名为“points”的类,其属性为“x”和“y”

然后我创建了一个点列表p = [p1,p2,p3,p4] 其中 p1.x = x1, py.y = y1 ...

如何轻松提取所有 x 和 y 值作为列表? 例如

x = [x1,x2,x3,x4]
y = [y1,y2,y3,y4]

这可以简单地在 python 中的一行代码中完成吗?

【问题讨论】:

标签: python list class


【解决方案1】:

你可以这样做:

p = [p1,p2,p3,p4]
x = [point.x for point in p]
y = [point.y for point in p]

【讨论】:

    【解决方案2】:
    x = [point.x for point in p]
    y = [point.y for point in p]
    

    可以,但这会重复p两次,这是不必要的,你可以试试:

    p = [p1, p2, p3, p4]
    x, y = list(zip(*[(point.x, point.y) for point in p]))
    

    【讨论】:

      【解决方案3】:

      你来了

      class Point:
          def __init__(self, x, y):
              self.x = x
              self.y = y
      
      points = [Point(1,2), Point(3,4), Point(5,6), Point(7,8)]
      
      x = [p.x for p in points]
      y = [p.y for p in points]
      
      print(x)
      print(y)
      

      输出:

      [1, 3, 5, 7]
      [2, 4, 6, 8]
      

      试试here

      【讨论】:

        【解决方案4】:

        你可以这样做

        x, y = [point.x for point in p],[point.y for point in p]
        

        【讨论】:

        • 这是一行吗?
        • @Asocia 是的
        • 您正在构建 2 个与 rémi couturier's answer 没有区别的 for 循环。对于真正的单行解决方案,请查看Kevin Mayo's answer
        • 真正的单线解决方案老兄是什么意思?代码在一行中。没有规定一行可以有多少个循环。
        • 单行解决方案应该易于阅读、理解和维护。您只是在一行中编写了 2 个 for 循环,如果 OP 需要添加另一个维度(比如z),他们需要添加一个不是 Pythonic 的全新循环。
        猜你喜欢
        • 2013-07-24
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        • 1970-01-01
        相关资源
        最近更新 更多