2010-10-10 8 views
-2

Je veux que la tâche suivante soit effectuée en Python sans importer de modules.Trouver une combinaison en Python sans importer des outils

Mon code consiste

Two List 
--------- 
list1=['aun','2ab','acd','3aa'] 
list2=['ca3','ba2','dca','aa3'] 

Function 
--------- 

où il:

  • génère 2 articles combinaison de list1
  • Génère combinaison 2 articles de liste2
  • Génère combinaison 2 articles de list1 et list2

Je ne ai pas besoin d'imprimer ces toutes les combinaisons de deux articles

Mais je veux passer tous ces 2 articles combinaisons à la tâche Afficher les résultats supplémentaires et

analysize R.. **ca3** .... and ... **2ab** // Combinations of two items from list1 and list2 

Print analysize 
+1

Il est difficile Pour comprendre la question, votre anglais est très sommaire. Pourriez-vous donner quelques exemples d'intrants et de résultats attendus? –

+0

OP a déjà demandé cela ici: http://stackoverflow.com/questions/3899593/finding-length-of-items-from-a-list/ et a reçu une réponse correcte. Cependant, maintenant il veut le faire sans itertools. – eumiro

Répondre

6

Eh bien, vous avez déjà obtenu la réponse comment pour le faire avec itertools. Si vous voulez le faire sans importer ce module (pour une raison quelconque ...), vous pouvez toujours jeter un oeil à thedocs et lire la source:

def product(*args, **kwds): 
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy 
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 
    pools = map(tuple, args) * kwds.get('repeat', 1) 
    result = [[]] 
    for pool in pools: 
     result = [x+[y] for x in result for y in pool] 
    for prod in result: 
     yield tuple(prod) 

et

def combinations(iterable, r): 
    # combinations('ABCD', 2) --> AB AC AD BC BD CD 
    # combinations(range(4), 3) --> 012 013 023 123 
    pool = tuple(iterable) 
    n = len(pool) 
    if r > n: 
     return 
    indices = range(r) 
    yield tuple(pool[i] for i in indices) 
    while True: 
     for i in reversed(range(r)): 
      if indices[i] != i + n - r: 
       break 
     else: 
      return 
     indices[i] += 1 
     for j in range(i+1, r): 
      indices[j] = indices[j-1] + 1 
     yield tuple(pool[i] for i in indices) 
+1

Parce que pourquoi laisser quelqu'un d'autre gérer la source quand vous le pouvez? –

+0

@Nick T: Oui, ces gens Python ne peuvent pas faire confiance ... –

+0

@ Tim Pietzcker- J'ai mis à jour mes problèmes. Pouvez-vous me donner un indice où puis-je passer les deux valeurs des éléments de la liste? Je suis un peu novice à python – MysticCodes

Questions connexes