Разделить массив внутри другого в Python - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь написать код, который сравнивает два массива ('a' и 'b)' и делает что-то подобное, получая массив 'c':

a = [1, 2 , 2, 3, 3, 5]

b = [1, 2, 3] (случайно взято из 'a')

c = [2, 3, 5 ]

У меня очень простая проблема, так как алгоритм в порядке. Я использую код:

vetor1 = [1, 2, 2, 3, 3, 5]
vetor2 = sorted(random.sample(vetor1, 3))
inter = np.intersect1d(vetor1, vetor2)

cont_array2 = []
for i in range(len(inter)):
    cont2 = 0
    for j in range(len(vetor2)):
        if inter[i]==vetor2[j]:
            cont2 = cont2 + 1   
    cont_array2.append(cont2)

cont_array1 = []
for i in range(0,len(inter),1):
    cont1 = 0
    for j in range(0, len(vetor1), 1):
        if inter[i]==vetor1[j]:
            cont1 = cont1 + 1   
    cont_array1.append(cont1)

n_elements = np.subtract(cont_array1, cont_array2)

vetor2_1 = []
for i in range(len(n_elements)):
    if n_elements[i]!=0:
        vetor2_1.append(inter[i]*np.ones(n_elements[i]))

vetor2_2 = []
for data1 in vetor1:
    if data1 not in inter:
        vetor2_2.append(data1)

vetor3 = sorted(vetor2_1 + vetor2_2)
print(vetor3) 

Результат, который я получаю:

[array([2.]), array([3.]), 5]

Я полагаю, что проблема в:

vetor2_1.append(inter[i]*np.ones(n_elements[i]))

Потому что:

print(vetor2_1)

Дает мне:

[array([2.]), array([3.])]

Что мне делать, поскольку я не получаю ответ [2, 3, 5]?

Ответы [ 2 ]

0 голосов
/ 16 января 2020
//generating a random index for array a, to take 3 elements out of it
my_random_int = random.randint(0,len(a)-2)

//popping the element out of the array to put them in b

for x in range(0,2):
    b[x]=a.pop(my_random_int+x)

источники:

https://www.programiz.com/python-programming/methods/list/pop

https://www.edureka.co/blog/generate-random-number-in-python/

0 голосов
/ 16 января 2020

IIU C, вы можете превратить весь ваш алгоритм в одну строку:

a = [1, 2, 2, 3, 3, 5]

b = [1, 2, 3]

c = [a.pop(a.index(i)) for i in b] #Works even with strings.

Вывод:

[2, 3, 5]

Если вам нужно что-то параметризовать, вы можете превратить его в функция. Это будет работать с sorted(random.sample(vetor1, 3)), но я не использовал его для репликации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...