Reputation: 1
i have two lists, both with 128 items:
a= [0, 1, 2, 3, ...] b= [6.4, 53.8, -5.2, 7.1, ...]
i have to run list b through two checks:
if check1 is true, than b[n]=b[n]-50, AND a[n]=a[n]+1 if check2 is true, than b[n]=b[n]+100, AND a[n]=a[n]-1
i can't figure out how to tie the two items in each list together so that a change in list b[n] triggers a change also in list a[n]
using this example, after running these lists through the 2 checks:
a= [0, 2, 1, 3, ...] b= [6.4, 3.8, 94.8, 7.1, ...]
i'm only weeks into programming with python and i have absolutely no previous experience with coding. i've been reading about iterators, maps, for loops, etc but i can't seem to get the language right for this sequence.
it seems easy but i'm stuck!
thanks,
joel.
Upvotes: 0
Views: 1183
Reputation: 56674
Is there anything wrong with just
for i in range(len(a)):
if b[i] > 50.0:
b[i] -= 50.0
a[i] += 1
elif b[i] < 0.0:
b[i] += 100.0
a[i] -= 1
Upvotes: 3
Reputation: 61617
Produce pairs of corresponding items from the two lists with zip
and process each pair. You can use a generator comprehension to get all the processed pairs, and zip
again to get lists back.
def process(a, b):
if b > 50:
a += 1
b -= 50
elif b < 0:
a -= 1
b += 100
return (a, b)
def process_all(as, bs):
# Notice the '*' here. 'zip' takes multiple arguments;
# the '*' forces evaluation of the generator, and expands the resulting
# sequence into several arguments.
return zip(*(process(a, b) for (a, b) in zip(as, bs)))
Upvotes: 4