Reputation: 17
Good[ Morning : Evening ]
Im trying to make a small programme that :
-reads a text file containing numbers -assigned each line into an element of int_list
-takes a given list (max_quantity) and divides all the elements by 2 resulting in (max_q_in_half)
-then make all the elements that are below 50% of their maximum value into a new list (new_list)
-then return the smallest number in the (new_list)
-then uses that number to get it's index in the original (int_list)
-then uses that index to match the number to it's element in (metal_list)
HERE IS THE PROBLME
As you see in the output of this code the numbers below 50% are [41, 1]
the lowest value is 1 which has the index 6
but when i search int_list for this value it returns the firt occurence of 1 which is at index 3 which coresponds to BRASS but the correct answer should be Titanium
im triying to work around this issue by assigning a weight to each line in the text file so when i search the index of a value that value would be unique take into account that the lines vary in number in the original text file
could somebody help me make a programe that assignes wheights of X.01 to line one and X.02 to line two ...
-41.01 #Line_1
-20.02 #Line_2
-6.03 #Line_3
-1.04 #Line_4
-14.05 #Line_5
-6.06 #Line_6
-1.07 #Line_7 ...
int_list = [41, 20, 6, 1, 14, 6, 1]
metal_list = ['aluminium', 'iron', 'zinc', 'brass', 'stainless steel','copper', 'titanium']
max_quantity = [ 100, 30, 6, 2, 18, 7, 15]
max_q_in_half = [x // 2 for x in max_quantity]
new_list = [i for i, j in zip(int_list, max_q_in_half) if i < j]
x = min(new_list)
v = int_list.index(x)
w = metal_list.__getitem__(v)
print("Current List ", int_list)
print("what is below 50%",new_list)
print('lowest value ',x)
print("position in int_list ",v)
print("position Metal_list ",w)
Upvotes: 1
Views: 43
Reputation: 1723
You can divide the elements of the list by 2 when checking. It is better to number it when creating a list, but with the second member, so that the number does not interfere when checking for a minimum.
int_list = [41, 20, 6, 1, 14, 6, 1]
metal_list = ['aluminium', 'iron', 'zinc', 'brass', 'stainless steel', 'copper', 'titanium']
max_quantity = [100, 30, 6, 2, 18, 7, 15]
x = min([(i, n) for n, (i, j) in enumerate(zip(int_list, max_quantity)) if i < j//2])
print(x)
w = metal_list[x[1]]
print("position Metal_list ", w)
(1, 6)
position Metal_list titanium
Upvotes: 1