2017-03-24 2 views
0

저는 파이썬에 매우 익숙하며 저를 도울 수 있기를 바랍니다.목록에서 문자열 요소를 분할하는 방법 (파이썬)

저는 Hostelworld의 리뷰어에 대한 정보가 들어있는 reviewerdetails이라는 문자열 목록을 가지고 있습니다. 각 문자열에는 검토 자의 국가, 성별 및 연령대의 세 가지 요소가 있습니다. 예를 들어, 첫 번째 경우는 다음과 같습니다

'\n    Belgium,    Female,    18-24   ' 

나는이 세 가지 요소에 대한 별도의 세 가지 목록을 만들 싶지만 목록에서 문자열 내에서 요소를 선택하는 방법을 확실하지 않다? 나는 .split 기능을 시도,하지만 난이 질문에 발견

AttributeError: 'list' object has no attribute 'split'. 

오류를 얻을 : split elements of a list in python 종류의 내가하고 싶은 싶어 시도,하지만 난 내 문제에 대한 답변을 적용하는 방법을 모른다 .

+1

힌트 : 목록의 각 요소를 '분할'해야합니다. – ForceBru

+1

앞으로는 오류가 발생했을 때 소스 코드 일부를 포함시키는 것이 좋습니다. 그러면 코드에 무엇이 잘못되었는지 알아낼 수 있습니다. – Aaron

+0

[ask] 및 [mcve]를 읽고 싶을 수 있습니다. ... – boardrider

답변

1

무언가는 split을 사용하고 빈 문자열을 필터링합니다.

mylist = [x.strip() for x in reviewerdetails.split(" ") if len(x.strip()) > 0]; 
0

지능형리스트 사용해보십시오 : 당신이하지 목록 자체에, 목록의 각 요소에 함수를 적용 할 필요가 있으므로,

output = [input[i].split(do whatever you need to in here) for i in range(len(input))] 

분할 기능이 아닌 문자열 목록의 구성원을 . (우리가 .split를 호출하고 반복 3 회를 원하지 않는 경우)

2

불행하게도

li = ['\n    Belgium,    Female,   18- 24   ', 
     '\n    Belgium,    Male,    18-24   '] 

li = [elem.split() for elem in li] 
print(li) 
# [['Belgium,', 'Female,', '18-24'], ['Belgium,', 'Male,', '18-24']] 
countries, genders, ages = [], [], [] 
for elem in li: 
    countries.append(elem[0]) 
    genders.append(elem[1]) 
    ages.append(elem[2]) 

print(countries) 
print(genders) 
print(ages) 
# ['Belgium,', 'Belgium,'] 
# ['Female,', 'Male,'] 
# ['18-24', '18-24'] 
+0

도움 주셔서 감사합니다! 그것은 효과가 있었지만, 여전히 약간의 문제가 있습니다. '성 (gender)'이 그룹 이었기 때문에 문자열 중 일부는 더 많은 요소로 구성되었습니다 (미안하지만, 전에 언급 했어야 했음). '[미국,', '모두', '여성', '그룹', '18 -24'] 예가 있습니다. if 문으로이를 바로 잡으려고했지만 문제는 '모두', '여성'및 '그룹'이 목록에 별도로 들어간다는 것입니다. 이러한 요소 (성별)가 함께 묶여 지도록 요소를 분할하는 방법이 있습니까? – Lisadk

+0

더 명확하게 : 옵션은 '여성', '남성', '혼합 그룹', '모든 여성 그룹'및 '모든 남성 그룹'입니다. – Lisadk

0

희망 나는 우리는 지능형리스트에서 할당을 사용할 수 없습니다, 그래서 이것은 명시 적 for 루프에서 수행 될 필요가 정확하게 이해하고 있습니다.이게 당신이하려는 일이라고 생각합니다.

main_list = [ 
    '\n    Belgium,    Female,    18-24   ', 
    '\n    Belgium,    Female,    18-24   ' 
] 
for s in main_list: 
    # create a list split by comma 
    sub_list = s.split(",") 
    # cleanup any whitespace from each list item 
    sub_list = [x.strip() for x in sub_list] 
    print(sub_list) 
0

나는 또한 새로운 프로그래머이기 때문에 비효율적 일 수 있습니다. 내가하는 일은 세 가지 목록을 만드는 것입니다. 하나는 국가를위한 것이고, 다른 하나는 성을위한 것이고, 다른 하나는 연령대를위한 것입니다. 그런 다음 루프에 대해 수행 할 것이므로 국가 목록에 [...,'Belgium',...]이 있으면 알 수 있습니다. 각 목록에 대한 그래서, 나는

for reviewer in reveiwerdetails: 
    for country in [country list name]: 
     if country in reviewer: 
      [list name].append(country) 
      break 
    for gender in [gender list name]: 
     if gender in reviewer: 
      [list name].append(gender) 
      break 
    for agerange in [age range list name]: 
     if agerange in reviewer: 
      [list name].append(agerange) 
      break 

그래서 당신은 순서대로 검토, 성별 및 연령대의 모든 국가들과 목록을 가지고 그런 식으로 말할 것입니다. 다시 말하지만, 이것은 아마도 매우 비효율적이며 아마도 그것을하는 훨씬 쉬운 방법이 있습니다.

관련 문제