Как перебрать строку после использования функции split - PullRequest
0 голосов
/ 27 декабря 2018

Вот строка ds = 'Java;Python;Рубин;SQL 'Я использовал функцию скольжения, чтобы разделить каждый язык и нашел счетчик одного языка.если я хочу найти, если какой-либо из двух языков встречается в строке, он возвращает ноль.пример: в приведенной выше переменной при наличии как java, так и python он должен возвращать count как единицу.

def language_both_jp(y):
    count = 0
    prog = (y.split(";"))
    for i in range(0,len(prog)):
        if(prog[i] == 'Java'):
            for i in range(0,len(prog)):
                if(prog[i] == 'Python'):
                    count += 1
    return count

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Проблема в том, что вы должны делиться на "; ", поэтому у вас должно быть:

def language_both_jp(y):
    count = 0
    prog = (y.split("; "))
    for i in range(0,len(prog)):
        if(prog[i] == 'Java'):
            for i in range(0,len(prog)):
                if(prog[i] == 'Python'):
                    count += 1
    return count

language_both_jp(ds)
#1

Более простой подход будет:

def language_both_jp(x, l):
    return 1 if [i for i in ds.split("; ") if i in l] else 0

language_both_jp(ds, ['Python','Java'])
#1
0 голосов
/ 27 декабря 2018

Ваше требование не совсем понятно ... однако, пожалуйста, попробуйте следующие решения ...

i.если вы want to find the count of occurrence из word просто передадите строку и word в качестве аргумента ..

попробуйте следующий код ...

def language_both_jp(y, word):
    count = 0
    prog = (y.split(";"))
    for i in range(0,len(prog)):
        if(prog[i] == word):
            count += 1
return count

string = 'java;python;java;python;c;python'
print(language_both_jp(string, 'java'))

, он напечатает счетчиквхождение слова

ii.Если вы хотите оштрафовать вхождение двух слов ..

, попробуйте код ниже:

def language_both_jp(y, word1,word2):
    count1 = 0
    count2 = 0
    prog = (y.split(";"))
    for i in range(0,len(prog)):
        if(prog[i] == word1):
            count1 += 1
        if(prog[i] == word2):
            count2 += 1
    return 'occurrence of '+word1+'='+str(count1)+'\n'+'occurrence of '+word2+'='+str(count2)

args = 'java;python;java;python;c;python'
print(language_both_jp(args, 'java','python'))

iii.Если вы хотите найти наличие каких-либо двух слов ...

попробуйте ниже код

def language_both_jp(y, word1,word2):
    count = ''
    prog = (y.split(";"))
    for i in range(0,len(prog)):
        if(prog[i] == word1):
            for i in range(0, len(prog)):
                if(prog[i] == word2):
                    count = 'yes'
                else:
                    count = 'no'
return count

args = 'java;python;java;python;c;python'
print(language_both_jp(args, 'java','python'))

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

0 голосов
/ 27 декабря 2018

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

ds = 'Java; Python; Ruby; SQL'

counts = {}
for chunk in ds.split(';'):
    language = chunk.strip()
    counts[language] = counts.get(language, 0) + 1

print(counts)

Вывод

{'Java': 1, 'SQL': 1, 'Python': 1, 'Ruby': 1}

Более питонический подход будет заключаться в использовании коллекций. Счетчик :

from collections import Counter

ds = 'Java; Python; Ruby; SQL'
counts = Counter(language.strip() for language in ds.split(';'))
print(counts)

Вывод

Counter({'Java': 1, 'Ruby': 1, 'Python': 1, 'SQL': 1})

Как только у вас будет подобный отображению объект со счетчиками для каждого языка, выполните итерацию по ключу, парам значений и выведите те, у которых число больше 1, например:

from collections import Counter

ds = 'Java; Python; Ruby; SQL; Python'
counts = Counter(language.strip() for language in ds.split(';'))

for language, count in counts.items():
    if count > 1:
        print(language, count)

Выход

Python 2

Обратите внимание, что входная строка в вышеприведенном примере была слегка изменена, чтобы включить Python дважды.

...