Как сравнить строки, хранящиеся в двух списках в Python? - PullRequest
0 голосов
/ 09 января 2019

Проблема с циклом

Я не могу повторить и проверить значение из solu с помощью списка dgu.

Распечатывается над выводом upto print(solu)

Цикл, использованный позже, отстает и останавливается там без вывода, и я здесь не в курсе.

Может ли кто-нибудь объяснить, как сравнивать строки, если они существуют в двух разных файлах из разных источников?

from pandas import *
import pandas as pd
import csv
import re
import deepdiff
from pprint import pprint
import xlrd
from difflib import SequenceMatcher
import xlsxwriter
import tocamelcase
from spellchecker import SpellChecker
import numpy as np

xlsx = ExcelFile('WrongSpelling.xlsx')
df = xlsx.parse(xlsx.sheet_names[0])

dg = pd.read_csv("pfm.csv", usecols = ['Place Id','Name','Category'])
pla = dg['Place Id'].values.tolist()
nam = dg['Name'].values.tolist()
cat = dg['Category'].values.tolist()

print()
df2 = pd.DataFrame(df, columns = ['Spelling'])
bat= df2['Spelling'].values.tolist()

namo = [x.lower() for x in nam]
bato = [x.lower() for x in bat]

sol = set(namo) & set(bato)
solu = list(sol)
dgu= dg.values.tolist()
nam=list(nam)

print(solu)

print()

print("The Count of Matches with the incorrect data is" ,len(solu))

print(dg[:5])


print()

while i < len(dgu):
    while i < len(solu):
        # a = solu[i]
        # b = dgu[i]
        # c = nam[i]
        if solu[i] in dgu[i]:
            print(dgu[i])
        else:
            pass
    i+=1

1 Ответ

0 голосов
/ 09 января 2019

Ваш внутренний цикл while использует переменную i в качестве условия, когда она проходит длину solu, но вы увеличиваете инкремент в этом цикле while, поэтому он будет зацикливаться на вечность, проверяя i < len(solu), который никогда не будет оцените False, если он входит в цикл в первый раз.

Как уже упоминал @offeltoffel, цикл for, кажется, подходит вам лучше. Без возможности компилировать ваш код без проверяемого примера, вот как может выглядеть цикл for:

for i in range(len(dgu):
    for j in range(len(solu)):
        if solu[j] in dgu[i]:
            print(dgu[i])
        # don't need elsepass here, as it serves no purpose
    # don't need to increment i/j in a for loop manually as it iterates through the range created from the length of dgu/solu
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...