2017-01-11 3 views
1

Давайте иметь список строк: fruit = ["apple", "orange", "banana"]. Я хотел бы иметь выход, который печатает все возможные пары, т.е.Итерация над списком строк в Python

apple - apple, apple - orange, apple - banana, 
orange - orange, orange - banana, 
banana - banana 

Моя идея была enumerate фруктов и сделайте следующее:

for icnt, i in fruit: 
    jcnt = icnt 
    j = i 
    print ("icnt: %d, i: %s", icnt, i) 
    for jcnt, j in fruit: 
     print ("i: %s, j: %s", i, j) 

выжидательно строка не начинается с icnt-th но с самого начала. Как сделать второй цикл для начала из i-й строки?

+0

использование 'itertools.combinations' –

+0

Как @ Жан-FrançoisFabre говорит, вы должны использовать' itertools.combinations', но ответить на ваш вопрос, вы должны нарезать 'список fruit' во втором цикле например: 'для jcnt, j в перечислении (fruit [icnt:]):' Также если вы собираетесь использовать 'enumerate', сделайте это. –

ответ

3

использование itertools.combinations_with_replacement сделать это:

import itertools 

for a,b in itertools.combinations_with_replacement(["apple", "orange", "banana"],2): 
    print("{} - {}".format(a,b)) 

выход:

apple - apple 
apple - orange 
apple - banana 
orange - orange 
orange - banana 
banana - banana 

или itertools.combinations, если вы не хотите никаких повторов:

apple - orange 
apple - banana 
orange - banana 

BTW ваш фиксированный код будет выглядеть например, enumerate:

fruit = ["apple", "orange", "banana"] 

for icnt, i in enumerate(fruit): 
    for jcnt in range(icnt,len(fruit)): 
     print ("{} - {}".format(i, fruit[jcnt])) 
2

Не изобретайте велосипед. Используйте itertools:

from itertools import combinations_with_replacement 

fruit = ["apple", "orange", "banana"] 

print('\n'.join((' - '.join(perm) for perm in combinations_with_replacement(fruit, 2)))) 
# apple - apple 
# apple - orange 
# apple - banana 
# orange - orange 
# orange - banana 
# banana - banana 
+0

Это не совсем то, что показано в OP, например, у вас нет яблочного яблока –

+0

@MosesKoledoye Спасибо. получил исправление – DeepSpace

Смежные вопросы