Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
10 / 10 / 0
Регистрация: 20.10.2019
Сообщений: 119

Перебор всех комбинаций массива

27.12.2021, 17:18. Показов 5710. Ответов 13

Студворк — интернет-сервис помощи студентам
Суть задачи:
Имеется массив с неким количеством людей. Нужно сопоставить каждому человеку другого, пока не будут использованы все комбинации, а после этого вывести ТОП людей(с наибольшим числом выбора)
Пример:
Выбери: Name1 or Name2
Выбери: Name1 or Name3
...
Выбери: Name2 or Name3
и тд....



Мой код:

Python
1
2
3
4
5
6
7
8
9
import random as rnd
 
all_friends = ["Name1", "Name2", "Name3", "Name4", "Name5", "Name6"]
 
rnd.shuffle(all_friends)
 
def choosing(array: list):
    k = 0
    print('Привет! Выбери одного из двух людей: ')
// Алгортим...

Добавлено через 34 секунды
по идее для каждого человека нужно иметь свой счетчик...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2021, 17:18
Ответы с готовыми решениями:

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

Перебор комбинаций
Подскажите, как перебрать все возможные комбинации чисел длинной 3, если мы можем использовать для этого числа от 1 до n Например если n...

Перебор комбинаций из 2-х и более элементов
import math integer_ariangles = for a in range(1,100): for b in range(1,100): for c in range(1,100): if...

13
290 / 170 / 92
Регистрация: 21.03.2016
Сообщений: 400
27.12.2021, 17:56
Используй ООП.
В атрибутах имя и список друзей.

Добавлено через 9 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Man:
    def __init__(self):
        self.frinds_list = []
 
    def get_frinds(self, frind):
        if frind not in self.frinds_list:
            self.frinds_list.append(frind)
        else:
            print('Этот человек есть в списке друзей.')
 
    def number_of_friends(self):
        return len(self.frinds_list)
 
 
name1 = Man()
name2 = Man()
name3 = Man()
 
name1.get_frinds(name2)
name1.get_frinds(name3)
 
print(name1.number_of_friends(), name2.number_of_friends())
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
27.12.2021, 18:04
Python
1
2
3
4
5
6
7
8
9
10
11
from itertools import combinations
 
res = {}
all_friends = ["Name1", "Name2", "Name3", "Name4", "Name5", "Name6"]
 
for i, j in combinations(all_friends, 2):
    tmp = input(f'Привет! Выбери одного из двух людей {i} или {j}: ')
    while tmp not in (i, j):
        tmp = input(f'Мде, еще разок, Выбери одного из двух людей {i} или {j}: ')
    res[tmp] = res.get(tmp, 0) + 1
print(*res.items())
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
27.12.2021, 18:23
Python
1
2
3
4
5
6
all_friends = ["Name1", "Name2", "Name3", "Name4", "Name5", "Name6"]
 
for a1 in all_friends:
    for a2 in all_friends:
        if (a1 != a2):
            print((a1,a2))
0
10 / 10 / 0
Регистрация: 20.10.2019
Сообщений: 119
27.12.2021, 21:39  [ТС]
А как это на телеграм бота перенести, используя библиотеку telebot?

Добавлено через 22 секунды
Именно код, который enx предложил
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
28.12.2021, 09:48
Цитата Сообщение от Berbentsev Посмотреть сообщение
Используй ООП.
вот так, например:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import random
 
 
class Man:
 
    def __init__(self, name_par: str, friends_par: list, popularity_par=0):
        self.name = name_par
        if self.name in friends_par:
            friends_par.remove(self.name)
        self.friends = friends_par
        self.popularity = popularity_par
 
    def __repr__(self):
        return '\'' + self.name + '\' -> ' + str(self.popularity) + ' >*< ' + str(self.friends)
 
 
def people_generator(names: list):
    ret_pl = []
    for nm in names:
        get_index_end = random.randint(1, len(names) - 1)
        ret_pl.append(Man(nm, list(names[get_index_end:])))
    return ret_pl
 
 
def get_most_popular_person(ppl_list: list):
    for pop_index in range(0, len(ppl_list) - 2):
        tmp_pers = ppl_list[pop_index]
        for src_index in range(pop_index + 1, len(ppl_list) - 1):
            if tmp_pers.name in ppl_list[src_index].friends:
                tmp_pers.popularity += 1
            if ppl_list[src_index].name in tmp_pers.friends:
                ppl_list[src_index].popularity += 1
    ppl_list.sort(key=lambda x: x.popularity, reverse=True)
    return ppl_list[0]
 
 
names = ["Name1", "Name2", "Name3", "Name4", "Name5", "Name6"]
ppl = people_generator(names)
for p in ppl:
    print(p)
mpop = get_most_popular_person(ppl)
print('{} -> his popularity is {}'.format(mpop, mpop.popularity))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
28.12.2021, 11:48
Aviz__, и все это - ради простого перебора пар?
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
28.12.2021, 13:20
Catstail, не пар, как таковых)). у каждого чела есть список Френдов и сам он входит (или нет) в списки других челов, ну и соответственно у него есть "рейтинг социальности". самого социального мы и находим)). я именно так понял задачу.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
28.12.2021, 13:55
Aviz__, остается только руками развести... Вот что пишет ТС: "Имеется массив с неким количеством людей. Нужно сопоставить каждому человеку другого, пока не будут использованы все комбинации" Где здесь структура "человек - список друзей"? Поднимите мне веки!
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
28.12.2021, 14:06
Цитата Сообщение от Catstail Посмотреть сообщение
Поднимите мне веки!
пожалуйста))
Цитата Сообщение от Catstail Посмотреть сообщение
сопоставить каждому человеку другого
Вася1 за скобки выноси, и получишь)). только это тривиально, я усложнил, что у Вася1 есть не все другие Васи.
0
290 / 170 / 92
Регистрация: 21.03.2016
Сообщений: 400
28.12.2021, 16:09
Цитата Сообщение от Balaclava Посмотреть сообщение
после этого вывести ТОП людей(с наибольшим числом выбора)
А вот и про рейтинг.

Добавлено через 1 минуту
Цитата Сообщение от Balaclava Посмотреть сообщение
Добавлено через 34 секунды
по идее для каждого человека нужно иметь свой счетчик...
И вот.
1
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
28.12.2021, 16:15
Цитата Сообщение от Berbentsev Посмотреть сообщение
с наибольшим числом выбора
ога, это и есть соцРейтинг))!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
28.12.2021, 16:20
Aviz__, вот я и сопоставил каждого с каждым. Нет, формулировка - отстой.
0
 Аватар для Aviz__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
28.12.2021, 16:50
Цитата Сообщение от Catstail Посмотреть сообщение
формулировка - отстой.
да, какая разница? каждый решил, как он понял... пису-пис, всем бобра))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2021, 16:50
Помогаю со студенческими работами здесь

Быстрый перебор всех диагоналей двумерного массива (матрица)
Доброго времени суток, уважаемые форумчане, ОЧЕНЬ нужна ваша помощь, мне ОЧЕНЬ СРОЧНО необходимо написать максимально эффективный алгоритм...

Количество всех комбинаций монет
Запишите программу, которая определит количество всех комбинаций монет (1,5,10,25,50 центов), которыми можно выдать остальные Х в автомате...

Перебор всех возможных комбинаций
Доброго дня. Есть задание, написать брутфорс, по заданному алфавиту. То что представлено ниже, вроде успешно работает, но с 1...

Сортировка/перебор комбинаций символов
Добрейший вечерок! Хотелось бы получить помощь/консультацию/решение задания. Препод ужасно объясняет, поэтому, если можно, то помогите...

Вычисление всех комбинаций
Здраствуйте, уменя такой вопрос: мне надо вычислить все комбинации без повторений(3 из 10) деление (3 из 5), должно выйте 10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru