`new_rows[x]` and `new_data[x]` are invariant for this inner loop.

If we can assume `new_rows` and `new_data` are empty, calling `lil_insertat_nocheck` should be unnecessary, and the following should suffice:
```python
cdef list new_row = new_rows[x]
cdef list new_data = new_data[x]
for y in range(i_idx.shape[1]):
    value = lil_get1(M, N, rows, data, i, j)
    if value is not 0:
        new_row.append(y)
        new_data.append(value)
```