Python:替换列表列表中的元素(#2)

发布于 2024-09-25 20:14:34 字数 556 浏览 3 评论 0原文

上一个与我的标题相同的问题已发布 ,(我认为)有同样的问题,但代码中有其他问题。我无法确定那个案例是否与我的相同。

无论如何,我想替换列表中列表中的元素。 代码:

myNestedList = [[0,0]]*4 # [[0, 0], [0, 0], [0, 0], [0, 0]]
myNestedList[1][1] = 5

我现在期望:

[[0, 0], [0, 5], [0, 0], [0, 0]]

但我得到:

[[0, 5], [0, 5], [0, 5], [0, 5]]

为什么?

这在命令行中复制。 Python 3.1.2(r312:79147,2010 年 4 月 15 日,15:35:48) [GCC 4.4.3] 在 linux2 上

A previous question with the same title as mine has been posted, with (I think) the same question, but had other problems in the code. I was not able to determine if that case was identical to mine or not.

Anyway, I want to replace an element within a list in a list.
Code:

myNestedList = [[0,0]]*4 # [[0, 0], [0, 0], [0, 0], [0, 0]]
myNestedList[1][1] = 5

I now expect:

[[0, 0], [0, 5], [0, 0], [0, 0]]

But I get:

[[0, 5], [0, 5], [0, 5], [0, 5]]

Why?

This is replicated in the command line.
Python 3.1.2 (r312:79147, Apr 15 2010, 15:35:48)
[GCC 4.4.3] on linux2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

×纯※雪 2024-10-02 20:14:34

您通过 * 4 对同一对象有四个引用,请使用带有范围的列表理解来进行计数:

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print(my_nested_list)

为了更具体地解释问题:

yourNestedList = [[0,0]]*4
yourNestedList[1][1] = 5
print('Original wrong: %s' % yourNestedList)

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print('Corrected: %s' % my_nested_list)

# your nested list is actually like this
one_list = [0,0]
your_nested_list = [ one_list for count in range(4) ]
one_list[1] = 5
print('Another way same: %s' % your_nested_list)

You are having four references to same object by * 4, use instead list comprehension with range for counting:

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print(my_nested_list)

To explain little more concretely the problem:

yourNestedList = [[0,0]]*4
yourNestedList[1][1] = 5
print('Original wrong: %s' % yourNestedList)

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print('Corrected: %s' % my_nested_list)

# your nested list is actually like this
one_list = [0,0]
your_nested_list = [ one_list for count in range(4) ]
one_list[1] = 5
print('Another way same: %s' % your_nested_list)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文