Python Forum
Function that separates a list in two other ones
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Function that separates a list in two other ones
#1


Hi,

I have an assignment in which I have to write a function that takes a list, separates it in two other lists and return them into a tuple. One list has to consist of 80% of the original one, and the other 20%. My function should be able to take a list of any length, not just one that can be divided by 10, and separate in a similar ratio. So far, my code looks like this:

def sections(liste):
    test = []
    for i in range(int((len(liste) / 100) * 80) , len(liste)): 
        test.append(liste[i])
    train = [x for x in liste if x not in test]
    
    return train, test
Which for this list:

sections([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Returns this, which is okay:

Output:
([1, 2, 3, 4, 5, 6, 7, 8], [9, 10])
But for this list:

sections([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
Returns this:

Output:
([1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12])
But I want this result:

Output:
([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12])
I don't really know what to add to my code to make it work like it should, maybe an if statement regarding the length of the list?

Thanks!
Reply
#2
80% of 12 is 9.6, therefore ([1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12]) is correct
Reply
#3
(Dec-07-2017, 02:16 AM)Larz60+ Wrote: 80% of 12 is 9.6, therefore ([1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12]) is correct
well, under all math rules 9.6 would round to 10 and i guess that is why OP expects list with len 10 :-)

I also guess OP is using pythin2 thus / is actually floor division.
Reply
#4
then shouldn't rounding do the trick?
Reply
#5
Thanks! I used round() instead of int() and it worked. I must have been too tired to even think about it :P
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020