for循环永远不会以矩阵结束

时间:2017-05-25 23:08:51

标签: python for-loop matrix random

for sublistas in matriz:
    for espacios in matriz:
        ran = random.choice([p_vivo, p_muerto])
        matriz.append(ran)

我正在尝试使用带有2个随机选择的矩阵:p_muerto或p_vivo 问题是,循环永远不会结束。我认为这是因为它不断覆盖矩阵的元素,所以它会无限期地继续下去。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

是的,发生了无限循环,因为您正在修改添加新元素的原始矩阵。

您可以创建该矩阵的副本并对复制的矩阵进行操作 - 原件将保持安全且不会被修改。

如果您想使用原始矩阵进行操作 - 您只需循环复制即可。

答案 1 :(得分:1)

要遍历列表列表,您需要执行以下操作:

class Obj(): 
    def __init__(self, midPoint=[0,0]): 
        self.midPoint = midPoint

obj1 = Obj(midPoint = [1,1])
obj2 = Obj(midPoint = [2,2])
obj3 = Obj(midPoint = [3,3])
obj4 = Obj(midPoint = [1,1])
obj5 = Obj(midPoint = [2,2]) 

l = [obj1, obj2, obj3, obj4, obj5]
list_no_duplicates = [] 

# determines if midpoint already exists in any object inside list_no_duplicates
def midpoint_exists(midpoint):
    for obj in list_no_duplicates:
        if obj.midPoint == midpoint:
            return True
    return False

def Delete_duplicates(list1): 
    for obj in list1:
        # if there are no object with this midPoint, appends
        if not midpoint_exists(obj.midPoint):
            list_no_duplicates.append(obj)

Delete_duplicates(l)
print list_no_duplicates

如果你要追加循环中的列表,你应该循环复制。并且您不应该附加到顶级列表,您应该附加到子列表。或许你应该制作新的子列表并附加到他们身上。目前尚不清楚你想要的结果是什么。

for sublist in matriz:
    for element in sublist:

这会将列表从15x15更改为15x30