Par exemple
['Apple','Orange','Grape']
De la liste des
[['Apple'], ['Orange'], ['Grape'], ['Apple', 'Orange'], ['Apple', 'Grape'], ['Orange', 'Grape'], ['Apple', 'Orange', 'Grape']]
Je veux obtenir la sortie. Certaines combinaisons ne comportent qu'un seul élément et certaines combinaisons contiennent plusieurs éléments. Je sais que c'est une liste de 2 ^ n-1 réponses, mais quand j'ai essayé de l'écrire, j'ai trébuché. Ne va-t-il pas être un nid compliqué?
J'ai trouvé une bibliothèque standard qui peut être utilisée dans de tels cas. itertools --- Fonction de génération d'itérateur pour une exécution de boucle efficace
Itérateur | argument | résultat |
---|---|---|
combinations() | p,r | Colonne Taple de longueur r, pas de duplication dans l'ordre trié |
Par exemple
test.py
import itertools
lis = [1,2,3,4]
for pair in itertools.combinations(lis, 2):
print(pair)
Si vous faites ce qui précède, vous obtiendrez les résultats suivants:
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
Pour le moment, modifiez l'argument et réessayez.
test2.py
import itertools
lis = [1,2,3,4]
for team in itertools.combinations(lis, 3):
print(team)
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
Avec itertools.combinations (), vous pouvez obtenir tous les modèles de combinaison (en tapples) avec n'importe quel nombre d'éléments dans la liste ** comme ceci. ** ** Ici, si vous commencez avec 1 numéro d'élément et que vous le tournez à la longueur de la liste avec une instruction for, il semble que vous obtiendrez la réponse que vous vouliez en premier.
all_combinations.py
import itertools
lis=['Apple','Orange','Grape']
result = []
for n in range(1,len(lis)+1):
for conb in itertools.combinations(lis, n):
result.append(list(conb)) #Convertir taple en type de liste
print(result)
Résultat d'exécution
[['Apple'], ['Orange'], ['Grape'], ['Apple', 'Orange'], ['Apple', 'Grape'], ['Orange', 'Grape'], ['Apple', 'Orange', 'Grape']]
Si vous utilisez itertools, il semble qu'il y aura plus de situations où vous n'aurez pas à écrire des nids, et cela peut être un élément essentiel pour les paiza et les professionnels de la compétition. Comme mentionné dans "Code lisible", je pensais que si vous prenez l'habitude de lire régulièrement la bibliothèque standard, vous serez capable d'écrire du bon code.
C'était une introduction à la bibliothèque standard que j'ai trouvée utile!
Recommended Posts