У меня есть файл .txt, который содержит 100 строк и 500 столбцов. Каждая строка имеет одно целочисленное значение для каждого столбца. (т. е. 1 0 1 2 0 2 1 0 ...).
Для каждой строки я хочу сравнить каждый столбец с каждым другим столбцом в этой строке и создать списки кортежей для каждого сравнения. Это было выполнено с кодом ниже.
Однако теперь мне нужно исключить некоторые сравнения. В частности, каждый из 100 столбцов представляет набор, и мне нужно исключить сравнения в наборе. Например, мне нужно исключить кортежи для (column1, column2), (column1, column3) и т. Д., Но не сравнения, такие как (column1, column101).
Текущий код работает, сравнивая первый столбец с каждым другим столбцом, затем второй столбец с каждым другим столбцом, исключая первый, затем третий столбец с каждым другим столбцом, исключая первый и второй, и т. Д.
Я мог бы получить свой ответ, выяснив, какие кортежи нужно удалить по индексу (я знаю, скажем, что первые 99 кортежей нужно будет удалить, потому что это первый столбец по сравнению с другими первыми 100 столбцами), но это утомительно, и я знаю, что должен быть другой путь.
Есть ли простое решение этой проблемы, поддерживая структуру, которая у меня есть в настоящее время?
import itertools as it
import csv
import sys
csv.register_dialect('tab_delim', delimiter="\t", quoting=csv.QUOTE_NONE)
file_name = sys.argv[1]
#number_sequenced is the number of rows to include
number_sequenced = int(sys.argv[2]) #e.g. 100
# function to enumerate rows
def read_lines(csv_reader, row_list):
for row_number, row in enumerate(csv_reader):
if row_number in row_list:
yield row_number, row
# Read in specified number of rows
with open(file_name, 'r') as File:
reader = csv.reader(File, dialect='tab_delim')
r = list(range(0, number_sequenced))
# Generate tuples of all pairwise window combinations and add to master list
comparisons = []
for row_number, row in read_lines(reader, r):
row_tuples = list(it.combinations(row, 2))
comparisons.append(row_tuples)