I iterate over a Sublist (A). A has a defined lenght. Then, i extend another list (B) with the values of (A). For some reason, the first sublist (A) gets extended by the value i extend the other list (B) by.
I have absolutly no idea why this would happen and I'd be very thankfull for help regarding this issue.
combinations_list = [[[[1, 0], [], -3], [[0, 2], [], -3], [[2, 1], [], -3], [[0, 3], [], -3]]]
for A in combinations_list:
B = []
for i in range(len(A)):
for element in A[i][0]:
if B == []:
B.extend(A[i])
else:
if element in B[0]:
for e in A[i][0]: #Endless loop, A[i][0] gets extended by value of e
B[0].extend([e])
CodePudding user response:
You were appending a shallow copy of A's
sublists into B
. This means that when you were changing B
in the last loop, you were actually also changing elements of A
.. so A
just kept growing and the loop kept iterating.
To avoid it, use deepcopy
from the copy
module - it creates an actual, independent copy of A
s lists so now when you change them through B
, only B
will have them,
import copy
combinations_list = [[[[1, 0], [], -3], [[0, 2], [], -3], [[2, 1], [], -3], [[0, 3], [], -3]]]
for A in combinations_list:
B = []
for i in range(len(A)):
for element in A[i][0]:
print(B)
if B == []:
B.extend(copy.deepcopy(A[i]))
else:
if element in B[0]:
for e in A[i][0]:
B[0].append([e])
CodePudding user response:
After you do B.extend(A[i])
, B[0]
references the same list instance as A[0][0]
. So ,when you get to B[0].extend([e])
, you're actually adding to A[0][0]
as well. The loop for e in A[i][0]:
for the first i
will never end because you are adding to A[0][0] at every iteration.