I'm attempting to loop through a 2D list, and dependent on factors, either append to the row or remove the entire row
If tempX
matches a certain value, tempX
and tempY
should be appended to the current row in the list. If tempX
doesn't match that value, the entire row should be removed from the list.
This is the code so far.
aList = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
i = 0
for a, b, c, d, e in aList[:]:
tempC = c
tempD = D
tempX = tempC * 2 # These are just a placeholders for another calculation
tempY = tempD * 2
if tempX <= 10:
aList[i].append(tempX)
aList[i].append(tempY)
else:
del aList[i]
i += 1
Expected result: aList = [[6, 7, 8, 9, 10, 16, 18], [11, 12, 13, 14, 15, 26, 28]]
Instead this results in
ValueError: too many values to unpack
EDIT
After some research, I've come to this solution.
The key is bList = aList[::-1]
; this splices the list into reverse order, eliminating the situation in the previous example where I was effectively trying to take tyres off a car without a jack.
aList = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30]]
bList = aList[::-1]
i = 0
for a, b, c, d, e in bList:
tempC = c
tempD = d
tempX = tempC * 2
tempY = tempD * 2
if tempX >= 50:
bList[i].append(tempX)
bList[i].append(tempY)
else:
del bList[i]
i += 1
print bList
Which would be a good solution, apart from the fact that it is skipping every second row. I'm not too sure what is causing it to skip rows.
[[26, 27, 28, 29, 30, 56, 58], [21, 22, 23, 24, 25], [16, 17, 18, 19, 20], [11, 12, 13, 14, 15], [6, 7, 8, 9, 10], [1, 2, 3, 4, 5]]
[[26, 27, 28, 29, 30, 56, 58], [16, 17, 18, 19, 20], [11, 12, 13, 14, 15], [6, 7, 8, 9, 10], [1, 2, 3, 4, 5]]
[[26, 27, 28, 29, 30, 56, 58], [16, 17, 18, 19, 20], [6, 7, 8, 9, 10], [1, 2, 3, 4, 5]]
[[26, 27, 28, 29, 30, 56, 58], [16, 17, 18, 19, 20], [6, 7, 8, 9, 10]]
Expected result: bList = [[26, 27, 28, 29, 30, 56, 58]]
All the other rows should be deleted