【问题标题】:Make List of Unique Objects in Python在 Python 中创建唯一对象列表
【发布时间】:2015-08-09 02:42:40
【问题描述】:

可以像这样在 Python 中“填充”一个数组:

> [0] * 10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我想用这个示例原理快速创建一个相似对象的列表:

> a = [{'key': 'value'}] * 3
> a
[{'key': 'value'}, {'key': 'value'}, {'key': 'value'}]

但看起来这些对象是相互关联的:

> a[0]['key'] = 'another value'
> a
[{'key': 'another value'}, {'key': 'another value'}, {'key': 'another value'}]

鉴于 Python 没有 clone() 方法(这是我寻找的第一件事),我将如何创建独特的对象而不需要声明 for 循环并调用 append() 到添加它们?

谢谢!

【问题讨论】:

  • FWIW,copy.copy() 函数可用于“克隆”多种现有 Python 对象。此外,许多可变对象(deques、sets、dicts)有一个copy() 方法。列表对象在 Python 3 中增加了 copy() 方法。
  • 由于问题已结束,我将不得不使用评论来回答您问题中有趣的部分,“如果没有 for 循环和追加,您如何做到这一点?”您可以这样做:d = {'key': 'value'}; import copy; from itertools import repeat; a = list(map(copy.copy, repeat(d, 10)))。当 copy() 方法可用时,使用 starmap 会更快:a = list(starmap(d.copy, repeat((), 10))).

标签: python list unique


【解决方案1】:

一个简单的列表理解应该可以解决问题:

>>> a = [{'key': 'value'} for _ in range(3)]
>>> a
[{'key': 'value'}, {'key': 'value'}, {'key': 'value'}]
>>> a[0]['key'] = 'poop'
>>> a
[{'key': 'poop'}, {'key': 'value'}, {'key': 'value'}]

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2010-09-25
    • 2013-07-01
    • 2015-12-27
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多