J'ai une liste de python comme celle-ci.

[100, 150, 30, 50, 10, 20, 40]

Ensuite, je veux trouver 90 dans la liste ci-dessus (oui bien sûr pas là-dedans), mais mon résultat attendu est:

[50, 40]

Ou

[50, 30, 10]

Comment puis-je y parvenir en python ou dans un autre langage de programmation?

1
andrey_derma 23 mai 2018 à 20:07

3 réponses

Meilleure réponse

Vous pouvez utiliser une compréhension de liste pour parcourir toutes les combinaisons des éléments de liste qui correspondent à votre valeur cible

>>> from itertools import combinations
>>> data = [100, 150, 30, 50, 10, 20, 40]
>>> target = 90
>>> [comb for n in range(1, len(data)+1) for comb in combinations(data, n) if sum(comb) == target]
[(50, 40), (30, 50, 10), (30, 20, 40)]
3
CoryKramer 23 mai 2018 à 17:16

Pour cela, vous devez vérifier chaque combinaison de nombres. par exemple:

Prenez 100 et vérifiez si c'est moins de 90, si oui, puis vérifiez-le avec tous les autres nombres inférieurs à 90 et voyez s'ils ajoutent à 90, mais, si les deux nombres ajoutent à moins de 90, vérifiez avec les autres nombres pour voir si le nouveau ajouter à 90.

0
Benzaboy 23 mai 2018 à 17:17

Essayez d'utiliser une liste de compréhension et set:

>>> set([x for x in lst for y in lst if x+y == 90 and x != y])
{40, 50}
0
Austin 23 mai 2018 à 17:18