社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python对列表中的所有对象运行函数

Rollercoaster_HD • 3 年前 • 1309 次点击  

我这里有一个代码:

list = [[MyClass(), MyClass()], [MyClass()]]
list2 = [2, 2]

for i in range(len(list)):
    for j in range(len(list[i])):
        for k in range(list2[i]):
            list[i][j].list3.append(1)

for i in range(len(list)):
    for j in range(len(list[i])):
        print(list[i][j].list3)

在课堂上:

class MyClass():
    list3 = []

它输出:

[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]

而不是我预期的:

[1, 1]
[1, 1]
[1, 1]

但我不知道怎么了。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128104
 
1309 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Brayan Muñoz
Reply   •   1 楼
Brayan Muñoz    3 年前

首先,注意“list”在python中是一个保留字,所以应该将其更改为list1或其他内容。

记住 初始化 你班上的方法。。。

最好的方法是:

class MyClass():
    def __init__(self):
        self.list3 = []

list1 = [[MyClass(), MyClass()], [MyClass()]]
list2 = [2, 2]

for i in range(len(list1)):
    for j in range(len(list1[i])):
        for k in range(list2[i]):
            list1[i][j].list3.append(1)

for i in range(len(list1)):
    for j in range(len(list1[i])):
        print(list1[i][j].list3)
Samwise
Reply   •   2 楼
Samwise    3 年前
class MyClass():
    list3 = []

list3 是一个类变量,因此该类的所有实例都共享它。每次添加到 清单3 在…上 任何 例如,它是附加到单一共享列表的。

修理 MyClass 使 清单3 实例变量将为您提供所需的行为:

class MyClass:
    def __init__(self):
        self.list3 = []

我还建议简化你的工作 for 循环,因为它们有点难以遵循;如果按元素进行迭代,就更容易弄清楚每个循环在做什么。(此外,避免使用内置名称调用变量,如 list !)

list1 = [[MyClass(), MyClass()], [MyClass()]]
list2 = [2, 2]

for sublist, num in zip(list1, list2):
    for obj in sublist:
        obj.list3.extend(1 for _ in range(num))

for sublist in list1:
    for obj in sublist:
        print(obj.list3)

印刷品:

[1, 1]
[1, 1]
[1, 1]