сравнить сумму каждой строки с остальными строками

как лучше всего сравнить значение каждой строки ниже с остальными. предположим, я хочу найти, что 2 или более строк имеют одинаковую сумму (кроме операторов if).

каждый приведенный ниже индекс получен из случайной функции.

import random main_list = [random.randint(1,9) для iter в диапазоне(25)]

row_1_total = main_list[0] + main_list[1] + main_list[2] + main_list[3] + main_list[4]
row_2_total = main_list[5] + main_list[6] + main_list[7] + main_list[8] + main_list[9]
row_3_total = main_list[10] + main_list[11] + main_list[12] + main_list[13] + main_list[14]
row_4_total = main_list[15] + main_list[16] + main_list[17] + main_list[18] + main_list[19]
row_5_total = main_list[20] + main_list[21] + main_list[22] + main_list[23] + main_list[24]

print("Total of row 1 >>>", row_1_total)
print("Total of row 2 >>>", row_2_total)
print("Total of row 3 >>>", row_3_total)
print("Total of row 4 >>>", row_4_total)
print("Total of row 5 >>>", row_5_total)

person Fathi    schedule 29.01.2020    source источник
comment
Ваш актуальный вопрос: как я могу определить, совпадают ли два значения в наборе значений? Ваш код кажется очень рудиментарным, и неясно, что находится в main_list или какова его цель, но я предполагаю какой-то тип числа?   -  person Grismar    schedule 29.01.2020
comment
вот и все ››› import random main_list = [random.randint(1,9) for iter in range(25)]   -  person Fathi    schedule 29.01.2020
comment
Если это должна быть двумерная сетка, зачем использовать одномерный список? Вам просто нужен истинный/ложный ответ на то, есть ли две строки с одинаковой суммой, или вы хотите найти, какие это строки? Что, если три строки одинаковы или две пары строк одинаковы?   -  person kaya3    schedule 29.01.2020


Ответы (4)


Вместо 5 переменных сохраняйте суммы в виде списка. Если вы теряете цикл, вы можете взять часть списка на каждой итерации и уменьшить свой код до

main_list = [random.randint(1, 9) for _ in range(25)]
sums = [sum(main_list[i:i+4]) for i in range(0, len(main_list), 5)]
for i in range(len(sums)):
    print(f"Total of row {i + 1} >>>", sums[i])

Теперь можно поставить sums в set() и сравнить размер

sums_set = set(sums)
print(len(sums_set) == len(sums))
person Guy    schedule 29.01.2020

Во-первых, я бы предложил собирать итоги в чуть менее громоздкой структуре данных, например в виде списка:

row_total = []
row_total.append(main_list[0] + main_list[1] + main_list[2] + main_list[3] + main_list[4])
row_total.append(main_list[5] + main_list[6] + main_list[7] + main_list[8] + main_list[9])
row_total.append(main_list[10] + main_list[11] + main_list[12] + main_list[13] + main_list[14])
row_total.append(main_list[15] + main_list[16] + main_list[17] + main_list[18] + main_list[19])
row_total.append(main_list[20] + main_list[21] + main_list[22] + main_list[23] + main_list[24])
print(row_total[3])

Во-вторых, вы могли бы избежать большого количества повторений, вычислив итоги в одной строке следующим образом (при условии, что main_list останавливается на 24):

row_total = [sum(x[0+n:3+n]) for n in range(0, len(x), 3)]]

Тогда ответ на ваш вопрос будет примерно таким:

from collections import Counter
from random import randint

main_list = [randint(0, 10) for _ in range(25)]

row_total = [sum(main_list[0+n:3+n]) for n in range(0, len(main_list), 3)]

duplicate_totals = {t: c for t, c in Counter(row_total).items() if c > 1}

print(main_list)
# a dictionary of totals that show up twice or more often
print(duplicate_totals)

Результат будет выглядеть примерно так:

[4, 9, 1, 2, 0, 6, 8, 6, 4, 3, 0, 10, 0, 9, 1, 0, 10, 7, 10, 7, 0, 6, 2, 1, 7]
{17: 2}
person Grismar    schedule 29.01.2020

Добавьте строки в фрейм данных и используйте df.diff().eq(0) или любое сравнение

import pandas as pd
row_1_total=3
row_2_total=6
row_3_total=7
row_4_total=5
row_5_total=5
df= pd.DataFrame([row_1_total,row_2_total,row_3_total ,row_4_total ,row_5_total  ])
df.diff().eq(0)
print(df.diff().eq(0))
duplicat = df[df.duplicated()]
print(duplicat)
person I_Al-thamary    schedule 29.01.2020
comment
это (25) случайных целых чисел, представленных в 5 рядах. все, что я хочу, это сравнить и найти, равны ли 2 или более друг другу. Нет фиксированного значения для строк, с которыми нужно сравнивать. - person Fathi; 29.01.2020
comment
Я просто привожу вам пример. Попытайся. - person I_Al-thamary; 29.01.2020
comment
он возвращает false для всех строк, даже если 2 или более из них равны. - person Fathi; 29.01.2020
comment
Убедитесь в своих данных и распечатайте их, а чтобы увидеть результат кода, запустите мой пример. - person I_Al-thamary; 29.01.2020

Я думаю, вы ищете что-то вроде этого:

main_list = [[5,4,6], [1, 2, 3, 4], [4,5,6]]
total = []
for row in main_list:
    total.append(sum(row))


for t in total:
    print("value : ",t, " is at indices : ", total.indices(t))
person Umar Hayat    schedule 29.01.2020
comment
это основной список ››› main_list = [random.randint(1,9) for iter in range(25)] - person Fathi; 29.01.2020
comment
не могли бы вы включить main_list = [random.randint(1,9) в исходный вопрос. Чтоб всем досталось. - person Umar Hayat; 29.01.2020