简体   繁体   中英

Python For loop not incrementing

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.

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

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.

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)

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM