Функция Strip () не удаляет левый пробел из строки - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь найти только отдельные элементы из списка строк, строка содержит отдельные элементы, разделенные ";" , но это не убирает оставленное место для одного из элементов, и поэтому я получаю дубликаты.

gender_distinct = []
survey_genders = ['Male', 'Female', 'Other', 'Male; Other', 'Gender non-conforming', 'Male; Gender non-conforming', 'Female; Transgender', 'Transgender', 'Female; Gender non-conforming', 'Male; Female', 'Male; Female; Transgender; Gender non-conforming; Other', 'Transgender; Gender non-conforming', 'Male; Transgender', 'Female; Transgender; Gender non-conforming', 'Male; Female; Transgender; Gender non-conforming', 'Male; Female; Transgender', 'Gender non-conforming; Other', 'Male; Transgender; Gender non-conforming', 'Male; Gender non-conforming; Other', 'Male; Female; Other', 'Male; Female; Gender non-conforming', 'Female; Gender non-conforming; Other', 'Transgender; Other', 'Female; Transgender; Gender non-conforming; Other', 'Male; Female; Transgender; Other', 'Male; Female; Gender non-conforming; Other', 
'Female; Other', 'Female; Transgender; Other', 'Male; Transgender; Other']
for gender in list(survey_genders):
    for gender_each in gender.split(';'):
        if gender_each.strip() not in gender_distinct:
            print(gender_each)
            gender_distinct.append(gender_each)
print(" Distinct Gender ")
print(gender_distinct)

Результат кода: enter image description here

Ответы [ 3 ]

1 голос
/ 17 апреля 2020

исправленный код:

gender_distinct = []
survey_genders = ['Male', 'Female', 'Other', 'Male; Other', 'Gender non-conforming', 'Male; Gender non-conforming', 'Female; Transgender', 'Transgender', 'Female; Gender non-conforming', 'Male; Female', 'Male; Female; Transgender; Gender non-conforming; Other', 'Transgender; Gender non-conforming', 'Male; Transgender', 'Female; Transgender; Gender non-conforming', 'Male; Female; Transgender; Gender non-conforming', 'Male; Female; Transgender', 'Gender non-conforming; Other', 'Male; Transgender; Gender non-conforming', 'Male; Gender non-conforming; Other', 'Male; Female; Other', 'Male; Female; Gender non-conforming', 'Female; Gender non-conforming; Other', 'Transgender; Other', 'Female; Transgender; Gender non-conforming; Other', 'Male; Female; Transgender; Other', 'Male; Female; Gender non-conforming; Other', 
'Female; Other', 'Female; Transgender; Other', 'Male; Transgender; Other']
for gender in list(survey_genders):
    for gender_each in gender.split(';'):
        if gender_each.strip() not in gender_distinct:
            print(gender_each)
            gender_distinct.append(gender_each.strip())
print(" Distinct Gender ")
print(gender_distinct)
1 голос
/ 17 апреля 2020

Вы применяете полосу при проведении теста на загрязнение - оператор if - но вы не сохраняете версию строки с зачисткой - и добавляете в окончательный список версию без зачистки.

Просто измените свой код на:

gender_distinct = []
survey_genders = ['Male', 'Female', 'Other', 'Male; Other', 'Gender non-conforming', 'Male; Gender non-conforming', 'Female; Transgender', 'Transgender', 'Female; Gender non-conforming', 'Male; Female', 'Male; Female; Transgender; Gender non-conforming; Other', 'Transgender; Gender non-conforming', 'Male; Transgender', 'Female; Transgender; Gender non-conforming', 'Male; Female; Transgender; Gender non-conforming', 'Male; Female; Transgender', 'Gender non-conforming; Other', 'Male; Transgender; Gender non-conforming', 'Male; Gender non-conforming; Other', 'Male; Female; Other', 'Male; Female; Gender non-conforming', 'Female; Gender non-conforming; Other', 'Transgender; Other', 'Female; Transgender; Gender non-conforming; Other', 'Male; Female; Transgender; Other', 'Male; Female; Gender non-conforming; Other', 
'Female; Other', 'Female; Transgender; Other', 'Male; Transgender; Other']
for gender in list(survey_genders):
    for gender_each in gender.split(';'):
        gender_each = gender_each.strip()
        if gender_each not in gender_distinct:
            print(gender_each)
            gender_distinct.append(gender_each)
print(" Distinct Gender ")
print(gender_distinct)

Теперь, в Python, если вам нужен контейнер, в котором будет храниться ровно одна копия каждого элемента, проще использовать set, чем list :

...
gender_distinct = set()
for gender in list(survey_genders):
    for gender_each in gender.split(';'):
        gender_distinct.add(gender_each.strip())

print(" Distinct Gender ")
print(gender_distinct)
0 голосов
/ 17 апреля 2020

Рассмотрим только один проблемный случай, Male; Transgender; Other

gender_distinct = []
...
gender = 'Female; Transgender'
for gender_each in gender.split(';'):

Это будет принимать три значения: «Женский», «Трансгендерный». Мы сосредоточимся на втором значении

    if gender_each.strip() not in gender_distinct:

... которого нет, поскольку мы впервые видим Transgender с пробелом или без него.

        print(gender_each)
        gender_distinct.append(gender_each)

Как показывает print, gender_each имеет , а не было изменено; у этого все еще есть ведущее место! Таким образом, это версия, которую вы добавляете. Позже, когда вы доберетесь до простого «Transgender», он также будет добавлен.

Чтобы это исправить, просто сохраните результат strip и используйте это значение для остальной части l oop - не привыкать менять переменную al oop. Кроме того, вы можете легко использовать set для сохранения этих меток.

gender_distinct = set()
...
for gender_each in gender.split(';'):
    stripped = gender_each.strip()
    gender_distinct.add(stripped):
    print(stripped)
...