Подсчет суммарных значений длин переменных в списке - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть список, который может содержать не более 4 переменных. Чего я хотел бы добиться, так это объединить все комбинации из перечисленных ниже, чтобы определить общую длину списка для каждой комбинации. Я хотел бы написать комбинацию вместе с длиной. Каждая приведенная ниже переменная может появляться в списке только один раз, однако переменная с именем «James» может появляться более одного раза. Переменные:

  • Джеймс (может появляться более одного раза)
  • Полина (может появиться только один раз)
  • Сара (может появиться только один раз)
  • Бенедикт (может появиться только один раз)
  • Филипп (может появиться только один раз)
  • Джон (может появиться только один раз)

Итак, я бы хотел циклически добавить переменные в мой список, вычислить длину и затем сделать это снова, но со следующей комбинацией.

Я счастлив, как генерировать (len(my_list), но мне просто интересно, каков наилучший способ создания различных комбинаций? Для начала это будет так: -

my_list = ['James', 'James', 'James', 'James']
my_list = ['Pauline', 'James', 'James', 'James']
......
my_list = ['John', 'Sarah', 'Benedict', 'Phillippa']

Я просто не уверен, как перебрать 6 имен и создать все возможные комбинации для заполнения списка.

Я не ищу решение, а больше о том, как выполнить эту итерационную функцию, если кто-нибудь может указать мне правильное направление.

Спасибо всем

1 Ответ

0 голосов
/ 28 апреля 2018

Эта проблема настроена для itertools, например ::1002 *

In []:
import itertools as it

n = 4
choices = ['James']*n + ['Pauline', 'Sarah', 'Benedict', 'Phillippa', 'John']
list(it.combinations(choices, r=n))

Out[]:
[('James', 'James', 'James', 'James'),
 ('James', 'James', 'James', 'Pauline'),
 ('James', 'James', 'James', 'Sarah'),
 ('James', 'James', 'James', 'Benedict'),
 ...
 ('Pauline', 'Sarah', 'Benedict', 'John'),
 ('Pauline', 'Sarah', 'Phillippa', 'John'),
 ('Pauline', 'Benedict', 'Phillippa', 'John'),
 ('Sarah', 'Benedict', 'Phillippa', 'John')]

Но по вашему примеру трудно сказать, возможно, вы ищете permutations:

In []:
list(it.permutations(choices, r=n))

Out[]:
[('James', 'James', 'James', 'James'),
 ('James', 'James', 'James', 'Pauline'),
 ('James', 'James', 'James', 'Sarah'),
 ('James', 'James', 'James', 'Benedict'),
 ...
 ('James', 'John', 'Benedict', 'James'),
 ('James', 'John', 'Benedict', 'James'),
 ('James', 'John', 'Benedict', 'James'),
 ('James', 'John', 'Benedict', 'Pauline'),
 ...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...