Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
List of numbers to add
#1
So, this should be kinda simple to program, but I haven't been coding for a long time, and I'd need that project done the fastest possible, so I'm sorry if I'm being rude.
Anyway, I have a list an initial number (let's call it A) and a list of 20 Numbers (some of which are negative). I can only add them, and I'd like to get from A to 0 using only those Numbers (andI can only use them once). I Don't know if I'm really clear, but I tried my best.

P.S: It might seem like a school work, but it's not. If it was, it would be just stupid from me to just ask people on the internet.
Reply
#2
Please post a minimal code sample (in python code tags) of what you have so far, explain what you expect to happen and what is actually happening and any errors received in error tags.
Reply
#3
So, what I was going for, is first of all test if A + one of the Numbers was equal to the total I wanted, and got to this:

testlist=[5,8,23,-12]
total=15
init=7

def main(lis, valInit, valsearched):
    for i in lis:
        valInit+=i
        if valInit==total:
            return i
        valInit=7

print(main(testlist, init, total))
I picked the values so as they work.
Now, what I had planned was to set init (the initial value) to init+testlist[1] and then try with adding testlist[2], testlist[3] and testlist[4]. If it doesn't work, set init to init+testlist[1]+testlist[2] and try adding that value to one of the other values, and so on.
Again, excuse me if I'm not clear enough in my explanations

So, I thought it might be much easier, if I keep using for loops, to use something like that:

for i in lis:
    for j in range(1, len(lis)):
        valInit=valInit+i+j
        if valInit==total:
            return i
Reply
#4
You could use
https://docs.python.org/3/library/iterto...mbinations Wrote:itertools.combinations(iterable, r)
Return r length subsequences of elements from the input iterable.

Combinations are emitted in lexicographic sort order. So, if the input iterable is sorted, the combination tuples will be produced in sorted order.

Elements are treated as unique based on their position, not on their value. So if the input elements are unique, there will be no repeat values in each combination.

to get the various combinations of the list values to add to the initial value

itertools also has the following recipe
def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
Reply
#5
Thanks a lot ! I didn't give it a look though, but I'll definitely do it tomorrow, it looks pretty powerful :D

In the end, I just wrote one of the least efficient code I've ever created:
def main(lis, valInit, valcherchee):
    valref=valInit
    for a in range (len(lis)):
        valInit+=lis[a]
        if -1<valInit<1:
                return a
        else :
            for b in range(a+1, len(lis)):
                valInit+=lis[b]
                if -1<valInit<1:
                    return a,b
                else:
                    for c in range(b+1, len(lis)):
                        valInit+=lis[c]
                        if -1<valInit<1:
                            return a,b,c
                        else:
                            for d in range(c+1, len(lis)):
                                valInit+=lis[d]
                                if -1<valInit<1:
                                    return a,b,c,d
                                valInit=valref+lis[a]+lis[b]+lis[c]
                        valInit=valref+lis[a]+lis[b]                   
                valInit=valref+lis[a]
        valInit=valref
whith a few more lines. It worked anyway, I got where I wanted, but it must be the least efficient way to do it, so I'll work towards improving it, and thanks again for your help !
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How do I calculate a ratio from 2 numbers and return an equivalent list of about 1000 Pleiades 8 15,675 Jan-05-2024, 08:30 PM
Last Post: sgrey
  find random numbers that are = to the first 2 number of a list. Frankduc 23 3,211 Apr-05-2023, 07:36 PM
Last Post: Frankduc
  List of random numbers astral_travel 17 2,711 Dec-02-2022, 10:37 PM
Last Post: deanhystad
  Remove numbers from a list menator01 4 1,330 Nov-13-2022, 01:27 AM
Last Post: menator01
  [split] why can't i create a list of numbers (ints) with random.randrange() astral_travel 7 1,517 Oct-23-2022, 11:13 PM
Last Post: Pedroski55
  Divide a number by numbers in a list. Wallen 7 8,032 Feb-12-2022, 01:51 PM
Last Post: deanhystad
  producing numbers out of a list bouraque7878 10 3,752 Nov-12-2021, 09:13 PM
Last Post: jefsummers
  How to change odd to even numbers in the list? plumberpy 8 3,732 Aug-08-2021, 11:07 AM
Last Post: plumberpy
  convert numbers into list lokesh 1 2,381 Jun-03-2021, 06:37 AM
Last Post: menator01
  adding numbers in a list Nickd12 2 2,201 Jan-15-2021, 12:46 PM
Last Post: Serafim

Forum Jump:

User Panel Messages

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