Python For loop not incrementing

Question:

clean_offset = len(malware)

tuple_clean = []
tuple_malware = []

for i in malware:
    tuple_malware.append([malware.index(i), 0])
    print(malware.index(i))
    print(tuple_malware)
for j in clean:
    tuple_clean.append([(clean_offset + clean.index(j)), 1])
    print(clean.index(j))
    print(tuple_clean)
    import pdb; pdb.set_trace()

training_data_size_mal = 0.8 * len(malware)
training_data_size_clean = 0.8 * len(clean)

i increments as normal and produces correct output however j remains at 0 for three loops and then jumps to 3. I don’t understand this.

Asked By: qz_99

||

Answers:

for a in something

a is what is contained in something, not the index

for example:

for n in [1, 10, 9, 3]:
    print(n)

gives

1
10
9
3
Answered By: Pedru

You either want

for i in range(len(malware))

or

for i, element in enumerate(malware)

at which point the i is the count and the element in the malware.index(i)

The last one is considered best practice when needing both the index and the element at that index in the loop.

Answered By: Victor Sonck

There is a logical error on clean.index(j).
Array.index will return the first matched index in that array.
So if there are some equal variables there will be some error

You can inspect with below code.

malware = [1,2,3,4,5,6,7,8,8,8,8,8,2]
clean = [1,2,3,4,4,4,4,4,4,2,4,4,4,4]

clean_offset = len(malware)

tuple_clean = []
tuple_malware = []

for i in malware:
    tuple_malware.append([malware.index(i), 0])
    print(malware.index(i))
    print(tuple_malware)
for j in clean:
    tuple_clean.append([(clean_offset + clean.index(j)), 1])
    print(clean.index(j))
    print(tuple_clean)

training_data_size_mal = 0.8 * len(malware)
training_data_size_clean = 0.8 * len(clean)
Answered By: Barkın BOZ

op has already figured the question, but in case anyone is wondering or needs a TL;DR of Barkin’s comment, its just a small correction,

replace

for i in malware
for j in clean

with

for i in range(len(malware))
for j in range(len(clean))

and at the end remove the .index() function, and place i and j.

Answered By: 9dubs
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.