У меня есть программа, которая читает CSV-файл, проверяет любое несоответствие длины столбца (сравнивая его с полями заголовка), которое затем возвращает все, что было обнаружено в виде списка (а затем записывает в файл) , То, что я хочу делать с этим списком, чтобы перечислить результаты следующим образом:Как найти дубликаты в списке python, которые смежны друг с другом и перечислить их по индексам?
номера строк, где встречается то же несоответствие: количество столбцов в этой строке
например
rows: n-m : y
где n и m - числа строк, которые имеют одинаковое количество столбцов, которые не соответствуют заголовку.
Я смотрел на эти темы, и в то время как информация может быть полезной, они не дают ответа на вопрос:
Find and list duplicates in a list?
Identify duplicate values in a list in Python
Это где я сейчас:
r = csv.reader(data, delimiter= '\t')
columns = []
for row in r:
# adds column length to a list
colm = len(row)
columns.append(colm)
b = len(columns)
for a in range(b):
# checks if the current member matches the header length of columns
if columns[a] != columns[0]:
# if it doesnt, write the row and the amount of columns in that row to a file
file.write("row " + str(a + 1) + ": " + str(columns[a]) + " \n")
Выход файла выглядит следующим образом:
row 7220: 0
row 7221: 0
row 7222: 0
row 7223: 0
row 7224: 0
row 7225: 1
row 7226: 1
, когда желаемый конечный результат
rows 7220 - 7224 : 0
rows 7225 - 7226 : 1
Так что то, что я в основном нужно, как я понимаю, является словарь, где ключ строки с повторяющимся значением и значением является количество столбцов это сказанное несоответствие. То, что я в основном думаю, что мне нужно (в ужасном письменном псевдокоде, что не имеет никакого смысла теперь, когда я читаю его лет после написания этого вопроса), здесь:
def pseudoList():
i = 1
ListOfLists = []
while (i < len(originalList)):
duplicateList = []
if originalList[i] == originalList[i-1]:
duplicateList.append(originalList[i])
i += 1
ListOfLists.append(duplicateList)
def PseudocreateDict(ListOfLists):
pseudoDict = {}
for x in ListOfLists:
a = ListOfLists[x][0] #this is the first node in the uniqueList created
i = len(ListOfLists) - 1
b = listOfLists[x][i] #this is the last node of the uniqueList created
pseudodict.update('key' : '{} - {}'.format(a,b))
Это, однако, кажется очень запутанным способ делать то, что я хочу, поэтому мне было интересно, есть ли более эффективный способ b) более простой способ сделать это?