Как выделить a,b,c,d для разных строк в списке python?

#python #python-3.x #list #numpy #numpy-ndarray

Вопрос:

У меня есть набор значений a,b,c,d, я хочу создать вектор nx1, который распределяет значения по разным строкам на основе размера n. Если n=9, я хочу, чтобы вектор был [a b, a, a c, b, 0, c, b c, d, c d] или если n=4, мой вектор [a b, a c, b c, c d]. Для строки=1 запись равна a b, для строки sqrt(n) запись равна a c,промежуточные записи (т. е. 1 и sqrt(n)) равны a. Для строки=sqrt(n) 1 запись равна b, для 2 sqrt(n) запись равна c, а промежуточные записи-a. Для строки=2 sqrt(n) 1 запись=b c, для строки=n запись равна c d, а промежуточные записи-d. Различные значения n равны n=4, 9,25,100,225 и 400. Есть ли способ построить этот вектор с помощью цикла for вместо ручного создания вектора nx1 и использования операторов if для выделения соответствующего вектора, созданного вручную?

Ответ №1:

 s = {} #set filled with values (a b,a,a c...)
n = int(input()) #number of elements you want
l = []
for idx, ele in enumerate(s):
    if idx == n:
        break
    l.append(ele)
 

Ответ №2:

Я разделил n=4, так как это особый случай

 import numpy as np

n = 400
a,b,c,d = 1,2,4,8

result = np.empty((n,1))
sqrtn = n**0.5
if n == 4:
    result[:,0] = [a b, a c, b c, c d]
else:
    index1 = 0
    index2 = int(sqrtn)-1
    Index3 = int(sqrtn)
    index4 = int(2*sqrtn)-1
    index5 = int(2*sqrtn)
    index6 = int(n)-1
    result[Index3 1:index4] = 0
    result[index1 1:index2] = a
    result[index5 1:index6] = d
    result[index1] = a b
    result[index2] = a c
    result[Index3] = b
    result[index4] = c
    result[index5] = b c
    result[index6] = c d
 

Ответ №3:

Вы можете сделать это, написав это

 if n == 9:
    nx1 = [a b, a, a c, b, 0, c, b c, d, c d]
elif n == 4:
    nx1 = [a b, a c, b c, c d]
elif ...