【问题标题】:Accessing all class variables in a container without a loop在没有循环的情况下访问容器中的所有类变量
【发布时间】:2015-02-17 09:11:06
【问题描述】:

我有一个列表“用户”,其中包含“用户”类的对象。每个用户都有一个“记录”列表,其中包含“记录”类的对象。每条记录都有一个日期时间变量,用于描述该特定记录的制作时间。

我想创建一个列表,其中包含所有用户记录的所有日期时间变量。我已经使用嵌套循环来做到这一点,但我想有一个更聪明的方法?

# Add all dates to one list
dateList = list()
for i in range(0,nUsers):
    for j in range(0, len(users[i].records)):
        dateList.append(users[i].records[j].datetime)

【问题讨论】:

    标签: python list for-loop containers


    【解决方案1】:

    首先摆脱索引并迭代对象本身。

    dateList = list()
    for user in users:
        for record in user.records:
            dateList.append(record.datetime)
    

    然后你会发现你可以使用列表推导式。

    dateList = [record.datetime for user in users for record in user.records]
    

    【讨论】:

      【解决方案2】:

      列表理解可能就是您的意思。

      date_list = [r.datetime for user in users for r in user.records]
      

      Python 变量应该是 lower_case_with_underscores 而不是 CamelCase。

      另外,Python 中的迭代不需要使用索引。您可以直接在项目上进行迭代。

      【讨论】:

        【解决方案3】:

        您总是必须使用循环,但您可以在单个列表推导中做到这一点:

        date_list = [record.datetime for user in users for record in user.records]
        

        请注意,即使使用单独的循环,在 Python 中你也应该永远遍历一个范围,然后使用索引来获取元素;总是迭代事物本身,所以 for user in users 等等。

        【讨论】:

          【解决方案4】:

          您可以使用两个嵌套列表推导:

          date_list = [record.datetime for record in
                          [user.record for user in user_list]]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-10-25
            • 1970-01-01
            • 2011-03-13
            • 2012-10-13
            • 2018-08-19
            • 1970-01-01
            • 2015-09-09
            相关资源
            最近更新 更多