Как установить подмножества сравнения списков в комбинированном цикле - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть файл .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)
...