2017-09-11 1 views
3
x_list = ['a', 'b', 'c', 'd', 'e'] 
t_list = ['z', 'y', 'u'] 

Je veux remplacer les éléments de t_list par des éléments de x_list, "aléatoirement". J'ai fait des recherches et j'ai essayé quelque chose mais replace() ne fonctionnait pas pour les listes. Par exemple; x_new0 = ['a', 'z', 'c', 'y', 'u], x_new1 = ['z', 'y', 'c', 'd','u']. Comment puis-je faire ceci?Comment remplacer au hasard des éléments de la liste avec d'autres éléments de la liste?

+0

Vous pouvez attribuer élément directement, par exemple, 'x_list [2] = t_list [0] ' – nos

+0

Est-il important que a) tous les éléments de' t_list' soient inclus dans la nouvelle liste, et b) que ces éléments soient dans l'ordre? –

+0

Pouvez-vous s'il vous plaît montrer vos tentatives? Qu'est-ce qui a essayé? Qu'est-ce qui n'a pas fonctionné? Pouvez-vous fournir un [mcve] de votre problème. –

Répondre

1

Vous pouvez utiliser numpy.random.choice pour sélectionner aléatoirement les éléments dans lesquels vous souhaitez que les remplacements se produisent dans la liste d'origine. Puis zip ces index contre les valeurs que vous souhaitez utiliser pour la substitution et appliquer les remplacements.

from numpy.random import choice 

def swap_elements(x, t): 
    new_x = x[:] 
    for idx, value in zip(choice(range(len(x)), size=len(t), replace=False), t_list): 
     new_x[idx] = value 
    return new_x 

Exemple d'utilisation

>>> x_list = ['a', 'b', 'c', 'd', 'e'] 
>>> t_list = ['z', 'y', 'u'] 
>>> swap_elements(x_list, t_list) 
['y', 'u', 'z', 'd', 'e'] 
>>> swap_elements(x_list, t_list) 
['y', 'b', 'z', 'u', 'e'] 
>>> swap_elements(x_list, t_list) 
['y', 'b', 'z', 'u', 'e'] 
>>> swap_elements(x_list, t_list) 
['a', 'u', 'z', 'y', 'e'] 
2

Vous pouvez utiliser le module random et en utilisant la méthode random.randint() pour générer un nombre aléatoire compris entre 1 et 100 en tant que têtes et les queues tirage au sort pour décider de la place de la valeur ou non, puis utilisez la méthode random.choice() sur la 2ème liste pour retourner un élément aléatoire de la liste

import random 

first = ['a', 'b', 'c', 'd', 'e'] 
second = ['z', 'y', 'u'] 

print(first) 

for index, x in enumerate(first): 
    if random.randint(0, 1): 
     first[index] = random.choice(second) 

print(first) 

First run stdout: 
>> ['a', 'b', 'c', 'd', 'e'] 
>> ['y', 'z', 'u', 'y', 'y'] 

Second run stdout: 
>> ['a', 'b', 'c', 'd', 'e'] 
>> ['a', 'u', 'c', 'u', 'y'] 
+1

Son remplaçant tous les éléments de la première liste, pourrait-il ne pas vouloir que @ AK47 – Sanket

+0

Il remplace seulement tous les éléments si le «pile ou face» toss retourne vrai chaque fois – AK47

+0

Cela permet des remplacements en double – CoryKramer

0

Vous pouvez choisissez un index aléatoire d'une liste, et un index aléatoire de l'autre liste et prenez la valeur à l'index de un et placez-le à l'index de l'autre. Par exemple:

from random import randint 

a = [1 ,2, 3, 4] 
b = [5, 6, 7, 8] 

RandomIndexA = randint(0, len(a) - 1) 
RandomIndexB = randint(0, len(b) - 1) 

a[RandomIndexA] = b[RandomIndexB] 

Sinon, vous ne pouvait calculer un indice aléatoire puis choisir au hasard un élément de l'autre liste à l'aide random.choice(b) par exemple:

from random import randint, choice 

a = [1 ,2, 3, 4] 
b = [5, 6, 7, 8] 

RandomIndex = randint(0, len(a) - 1) 

a[RandomIndex] = choice(b)