Related
I'm a beginner in python , and I am doing the binary search task, I'm trying a different code than what it is common. My issue is that I can't return a new binary list. In the first time the function is working as it suppose to be, but for the second time the function isn't return the new list.
My Code:
import random, math
user_choice=random.randint(0,100)
print (user_choice)
max=100
number_elements=50
number_list=random.sample(range(max), number_elements)
sort_list=sorted(number_list)
print (sort_list)
count=0
limit=int(math.sqrt(number_elements))
# divide by 2 the length of the number_list
def divide_list(sort_list):
global count,number_elements
number_elements=int(number_elements//2)
count += 1
half=len(sort_list)//2
if user_choice <= sort_list[number_elements] :
sort_list=sort_list[:half]
print(sort_list)
else :
sort_list=sort_list[half:]
print(sort_list)
return sort_list
while len(sort_list)==0 or count <=limit:
max /= 2
divide_list(sort_list)
Output :
99
[5, 6, 8, 9, 14, 15, 17, 18, 19, 22, 23, 24, 26, 27, 28, 34, 35, 36, 38, 39, 40, 41, 44, 46, 47, 48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99],
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
[48, 50, 51, 53, 54, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 69, 75, 76, 80, 81, 86, 90, 96, 97, 99]
Thanks for your help.
Your function is returning the list but you are not storing/updating it.
Solution:
Change the line divide_list(sort_list) to sort_list = divide_list(sort_list).
Explanation:
When you are updating the variable sort_list inside the function before printing (the line --> sort_list=sort_list[half:]), it is updating the variable sort_list associated to that function call and not the global variable sort_list. So by storing the return value in the global variable (as given in my solution), your list gets updated and passes the updated list next time the function is called.
prints elements from a list with 10 digits per line
from this
n = [85, 13, 99, 34, 71, 15, 82, 24, 64, 61,
67, 99, 50, 68, 25, 37, 32, 27, 14, 91,
79, 15, 47, 48, 74, 88, 64, 53, 77, 50,
24, 91, 87, 55, 60, 75, 91, 22, 47, 63,
81, 88, 26, 48, 69, 59, 84, 77, 28, 36,
59, 74, 89, 73, 91, 64, 55, 88, 90, 48,
73, 97, 98, 40, 93, 50, 78, 60, 44, 77,
82, 51, 53, 65, 98, 59, 94, 91, 52, 44,
65, 85, 72, 92, 49, 67, 58, 48, 62, 54,
89, 67, 58, 48, 85, 45, 77, 76, 81, 77]
to this (without parenthesis)
value n :
85, 13, 99, 34, 71, 15, 82, 24, 64, 61,
67, 99, 50, 68, 25, 37, 32, 27, 14, 91,
79, 15, 47, 48, 74, 88, 64, 53, 77, 50,
24, 91, 87, 55, 60, 75, 91, 22, 47, 63,
81, 88, 26, 48, 69, 59, 84, 77, 28, 36,
59, 74, 89, 73, 91, 64, 55, 88, 90, 48,
73, 97, 98, 40, 93, 50, 78, 60, 44, 77,
82, 51, 53, 65, 98, 59, 94, 91, 52, 44,
65, 85, 72, 92, 49, 67, 58, 48, 62, 54,
89, 67, 58, 48, 85, 45, 77, 76, 81, 77
You can try this:
n = [85, 13, 99, 34, 71, 15, 82, 24, 64, 61,
67, 99, 50, 68, 25, 37, 32, 27, 14, 91,
79, 15, 47, 48, 74, 88, 64, 53, 77, 50,
24, 91, 87, 55, 60, 75, 91, 22, 47, 63,
81, 88, 26, 48, 69, 59, 84, 77, 28, 36,
59, 74, 89, 73, 91, 64, 55, 88, 90, 48,
73, 97, 98, 40, 93, 50, 78, 60, 44, 77,
82, 51, 53, 65, 98, 59, 94, 91, 52, 44,
65, 85, 72, 92, 49, 67, 58, 48, 62, 54,
89, 67, 58, 48, 85, 45, 77, 76, 81, 77]
print("value n :")
for x in range(10):
print(', '.join([str(num) for num in (n[x*10:x*10+10])]))
Output:
value n :
85, 13, 99, 34, 71, 15, 82, 24, 64, 61
67, 99, 50, 68, 25, 37, 32, 27, 14, 91
79, 15, 47, 48, 74, 88, 64, 53, 77, 50
24, 91, 87, 55, 60, 75, 91, 22, 47, 63
81, 88, 26, 48, 69, 59, 84, 77, 28, 36
59, 74, 89, 73, 91, 64, 55, 88, 90, 48
73, 97, 98, 40, 93, 50, 78, 60, 44, 77
82, 51, 53, 65, 98, 59, 94, 91, 52, 44
65, 85, 72, 92, 49, 67, 58, 48, 62, 54
89, 67, 58, 48, 85, 45, 77, 76, 81, 77
y = [", ".join([str(x) for x in n[10*(i-1):10*i]]) for i in range(1, 11)]
print("\n".join(y))
I first splitter the original list into 10 sublists, turned each one to a string, and then concat those strings.
You can just you simply to get desired output using separator in print
print('value n :')
for i in range(0, len(n), 10):
print(*n[i:i+10], sep = ', ')
Explanation
range(0, len(n), 10) creates starting index on each row
n[i:i+1] is the array of 10 values for each row
*n[i:i+1] is the unpacking operator that turns list n[i:i+1 into positional arguments for print (i.e. equivalent to print(n[i], n[i+1], ...n[i+10])
sep = ', ' causes each positional argument to be printed with a comma separator
Input:
n = [85, 13, 99, 34, 71, 15, 82, 24, 64, 61,
67, 99, 50, 68, 25, 37, 32, 27, 14, 91,
79, 15, 47, 48, 74, 88, 64, 53, 77, 50,
24, 91, 87, 55, 60, 75, 91, 22, 47, 63,
81, 88, 26, 48, 69, 59, 84, 77, 28, 36,
59, 74, 89, 73, 91, 64, 55, 88, 90, 48,
73, 97, 98, 40, 93, 50, 78, 60, 44, 77,
82, 51, 53, 65, 98, 59, 94, 91, 52, 44,
65, 85, 72, 92, 49, 67, 58, 48, 62, 54,
89, 67, 58, 48, 85, 45, 77, 76, 81, 77]
Code:
print('value n:')
for i in range(0, n.__len__(), 10):
print(*n[i:i+10], sep=', ',end='\n')
Output:
value n:
85, 13, 99, 34, 71, 15, 82, 24, 64, 61
67, 99, 50, 68, 25, 37, 32, 27, 14, 91
79, 15, 47, 48, 74, 88, 64, 53, 77, 50
24, 91, 87, 55, 60, 75, 91, 22, 47, 63
81, 88, 26, 48, 69, 59, 84, 77, 28, 36
59, 74, 89, 73, 91, 64, 55, 88, 90, 48
73, 97, 98, 40, 93, 50, 78, 60, 44, 77
82, 51, 53, 65, 98, 59, 94, 91, 52, 44
65, 85, 72, 92, 49, 67, 58, 48, 62, 54
89, 67, 58, 48, 85, 45, 77, 76, 81, 77
This question already has answers here:
Simple way of creating a 2D array with random numbers (Python)
(7 answers)
Closed 2 years ago.
I have written my code like this:
import random
a = []
for i in range(10):
for j in range(10):
a.append(random.randint(0,100))
x = np.shape(a)
print(a)
This is my output:
[[], 79, 46, 29, 48, 88, 43, 57, 53, 70, 55, 89, 19, 49, 11, 79, 41, 76, 82, 90, 91, 21, 86, 67, 80, 93, 13, 38, 51, 27, 43, 50, 79, 87, 23, 27, 1, 64, 43, 81, 67, 48, 35, 9, 50, 48, 70, 73, 94, 58, 75, 60, 43, 73, 88, 51, 12, 74, 88, 72, 83, 100, 7, 10, 50, 13, 64, 74, 37, 76, 44, 37, 46, 42, 20, 20, 100, 81, 11, 83, 27, 76, 29, 15, 3, 18, 81, 5, 34, 85, 99, 88, 53, 75, 53, 12, 19, 62, 1, 51, 44]
It is a 10 x 10 array. The first value is an array and 99 rest of the values. Can anyone help me solve this issue?
Try this:
import random
[[random.randint(0,100) for i in range(10)] for j in range(10)]
This question already has answers here:
What does "e" in "1e-5" in Python language mean and what is the name of this notation? [duplicate]
(3 answers)
What is the meaning of number 1e5?
(5 answers)
Closed 4 years ago.
I am running non-normal samples against normality tests, expecting it to fail. However, the p-value {normaltest: 2.64, shapiro: 6.23} is much higher than 0.05 so I cannnot reject the null hypotheses that this was drawn from a normal distribution. Could someone please enlighten me?
import random
from scipy.stats import shapiro
from scipy import stats
x = list()
for y in range(1000):
x.append(random.randrange(1,100))
print(stats.normaltest(x))
print(shapiro(x))
print(x)
NormaltestResult(statistic=500.02063130202464, pvalue=2.641797311523516e-109)
(0.9599024057388306, 6.233162463518298e-16)
[25, 94, 79, 12, 67, 27, 89, 94, 89, 34, 99, 58, 53, 29, 81, 94, 4, 52, 14, 19, 60, 26, 6, 85, 71, 57, 23, 13, 58, 75, 75, 10, 51, 12, 80, 3, 82, 64, 74, 57, 83, 15, 23, 45, 52, 51, 36, 61, 78, 50, 26, 72, 40, 19, 59, 90, 23, 71, 52, 25, 3, 16, 20, 62, 50, 56, 60, 73, 28, 96, 69, 80, 36, 11, 11, 7, 18, 1, 73, 17, 29, 57, 72, 87, 43, 18, 22, 54, 32, 35, 79, 27, 45, 81, 80, 79, 82, 49, 77, 73, 21, 17, 90, 96, 2, 72, 7, 43, 37, 72, 64, 53, 63, 5, 36, 74, 36, 59, 53, 55, 54, 15, 83, 65, 2, 64, 46, 51, 31, 1, 77, 28, 47, 75, 46, 56, 3, 16, 24, 27, 31, 66, 4, 61, 46, 2, 56, 59, 98, 86, 83, 86, 97, 59, 45, 80, 55, 23, 21, 61, 6, 20, 13, 54, 20, 58, 86, 38, 18, 47, 68, 52, 74, 19, 34, 56, 17, 91, 15, 54, 82, 95, 23, 54, 42, 81, 82, 6, 70, 1, 78, 49, 12, 25, 33, 38, 47, 41, 68, 75, 73, 76, 46, 7, 90, 89, 63, 43, 41, 46, 88, 14, 97, 37, 92, 76, 60, 7, 5, 56, 77, 98, 61, 60, 59, 64, 4, 76, 34, 84, 78, 39, 66, 24, 49, 60, 57, 13, 57, 18, 37, 52, 26, 36, 97, 47, 95, 26, 82, 82, 10, 76, 54, 67, 98, 22, 56, 20, 34, 76, 28, 50, 70, 87, 83, 13, 76, 87, 98, 29, 99, 29, 23, 74, 5, 54, 73, 31, 89, 10, 24, 15, 9, 34, 85, 23, 6, 25, 64, 94, 37, 30, 11, 9, 58, 43, 2, 1, 73, 49, 48, 41, 99, 30, 91, 17, 31, 58, 70, 46, 20, 33, 94, 35, 41, 19, 22, 2, 37, 8, 54, 41, 21, 16, 20, 65, 27, 68, 24, 19, 36, 63, 80, 12, 82, 74, 74, 46, 7, 36, 42, 72, 16, 26, 96, 48, 75, 86, 62, 20, 79, 66, 71, 43, 43, 96, 67, 97, 76, 40, 80, 97, 75, 2, 3, 97, 37, 78, 77, 25, 84, 82, 25, 87, 44, 80, 92, 95, 99, 48, 67, 12, 82, 3, 15, 40, 45, 94, 32, 87, 92, 24, 42, 73, 66, 20, 62, 9, 75, 51, 31, 3, 13, 76, 21, 32, 14, 58, 28, 14, 99, 14, 50, 45, 13, 83, 45, 59, 63, 39, 65, 78, 46, 96, 27, 16, 69, 42, 65, 68, 68, 90, 39, 50, 86, 7, 75, 93, 84, 23, 53, 31, 23, 63, 32, 60, 85, 67, 42, 5, 72, 44, 43, 98, 75, 55, 28, 99, 71, 72, 66, 46, 61, 52, 50, 16, 44, 63, 64, 32, 59, 73, 33, 36, 32, 45, 75, 44, 36, 74, 97, 2, 38, 30, 74, 12, 57, 11, 37, 83, 64, 3, 63, 3, 35, 61, 55, 59, 99, 51, 58, 63, 70, 84, 4, 18, 13, 51, 27, 75, 43, 63, 35, 76, 67, 32, 15, 54, 51, 31, 77, 97, 83, 50, 76, 87, 26, 55, 93, 31, 70, 5, 11, 54, 48, 55, 48, 76, 90, 75, 43, 34, 6, 22, 35, 29, 4, 47, 83, 44, 7, 2, 97, 74, 90, 91, 17, 12, 33, 52, 28, 95, 57, 22, 53, 83, 56, 71, 28, 76, 55, 12, 89, 27, 20, 20, 93, 43, 65, 34, 83, 92, 11, 22, 38, 90, 83, 77, 11, 5, 22, 73, 29, 67, 49, 16, 47, 60, 26, 20, 76, 57, 46, 70, 35, 9, 28, 33, 8, 33, 21, 65, 3, 67, 52, 45, 82, 32, 94, 89, 15, 27, 63, 53, 96, 4, 74, 29, 59, 67, 22, 24, 45, 63, 76, 66, 51, 28, 42, 83, 37, 56, 83, 14, 35, 99, 48, 93, 83, 76, 2, 20, 99, 41, 43, 61, 3, 13, 7, 74, 60, 17, 84, 16, 44, 76, 63, 85, 44, 27, 38, 29, 61, 34, 55, 91, 13, 31, 42, 35, 38, 6, 46, 31, 99, 85, 23, 67, 11, 4, 52, 57, 11, 9, 21, 64, 17, 46, 78, 83, 45, 68, 98, 88, 47, 1, 94, 24, 79, 47, 33, 7, 81, 12, 26, 99, 80, 78, 53, 88, 1, 49, 17, 91, 27, 44, 31, 20, 6, 46, 59, 40, 57, 80, 3, 72, 83, 81, 2, 27, 36, 94, 31, 30, 22, 26, 31, 14, 93, 11, 32, 14, 75, 17, 49, 54, 42, 56, 76, 42, 51, 69, 22, 86, 46, 97, 70, 24, 81, 3, 75, 81, 63, 48, 51, 72, 19, 16, 16, 1, 61, 95, 53, 36, 82, 93, 53, 65, 9, 40, 91, 41, 85, 65, 38, 59, 4, 92, 50, 51, 7, 87, 80, 45, 84, 57, 21, 44, 3, 52, 7, 53, 97, 46, 65, 37, 76, 7, 81, 49, 21, 25, 18, 84, 53, 84, 89, 5, 95, 69, 70, 56, 31, 69, 12, 72, 36, 12, 44, 94, 39, 97, 91, 92, 15, 17, 57, 17, 49, 47, 1, 8, 2, 93, 91, 29, 41, 12, 46, 75, 98, 14, 34, 6, 26, 6, 81, 75, 49, 61, 70, 83, 26, 83, 38, 40, 81, 27, 14, 40, 54, 35, 10, 22, 30, 38, 2, 95, 31, 32, 25, 88, 70, 33, 85, 52, 7, 47, 4, 87, 70, 90, 15, 53, 74, 45, 76, 50, 23, 54, 33, 90, 53, 70, 4, 6, 47, 77, 87, 60, 92, 94, 79, 36, 26, 20, 94, 59, 50, 72, 31, 25, 60, 24, 82, 93, 13, 57, 21, 72, 78, 27, 62, 67, 67, 62, 56, 40, 40, 49, 31, 52, 16, 67, 51, 87, 77, 1, 47, 49, 64, 48, 62, 90, 29, 68, 2, 39, 92, 89, 92, 34, 78, 48, 36, 32, 43, 26, 81, 22, 76, 95, 69, 79, 13, 77, 26, 70, 32, 21, 92, 97, 90, 98, 16, 81, 47, 83, 93, 50]
When I run the following code in the interpreter vs a script I receive different results. I'm trying to understand why. Initially I thought it was an issue with the numpy.mean() function.
num_friends=[29, 74, 41, 29, 81, 47, 48, 69, 33, 17, 13, 65, 14, 71, 76, 41, 22, 11, 57, 38, 78, 30, 53, 82, 59, 89, 57, 70, 16, 44, 75, 48, 35, 49, 12, 97, 85, 16, 85, 55, 64, 59, 94, 79, 91, 65, 12, 56, 33, 33, 33, 79, 46, 30, 51, 90, 84, 79, 11, 48, 56, 90, 45, 99, 57, 64, 35, 56, 84, 45, 69, 42, 56, 33, 31, 98, 97, 12, 10, 85, 96, 83, 16, 55, 36, 10, 52, 44, 43, 56, 27, 23, 95, 25, 44, 38, 17, 94, 97, 25]
print(np.sum(num_friends)/len(num_friends))
print(np.mean(num_friends))
I generated this list randomly. This is the only set I was able to create the error with. When I recreated the list with a new random.randrange(10,100) list the issue disappeared.
Results in the interpreter:
52.880000000000003
Results using a .py file:
52.88
I get the same odd results with SciPy. Thoughts?