2012-03-28 4 views
2

저는 파이썬에 대해 아주 익숙하지 만 빨리 잡을 것 같아요.파이썬에서 변수 문자열을 사용하는 조건문 사용하기

어쨌든, 나는 수업을 위해서가 아니라, 나를 돕기 위해 프로그램을 만들고 있는데, 문제를 보았습니다.

나는 물건의 목록을 문서화하려고 노력하고있다. 그리고 물건에 관해서는, 그들 중 1000 명에 가까운 것을 의미한다. 그래서 내 문제는 이것입니다 :

목록에 중복 된 이름을 추가하고 싶지 않습니다. 대신에 2 배 또는 3 배를 추가하기를 원합니다. (어느 것이든지 더 간단합니다). txt 문서.

텍스트 문서를 읽고 쓰는 것이 좋습니다. 단, 문제는 조건문이므로 쓰기 방법을 모르거나 온라인으로 찾을 수 없습니다.

for lines in list_of_things: 
    if(lines=="XXXX x (name of object here)"): 

그리고 if 문 아래에 무엇이든. 내 유일한 문제는 "XXXX"는 임의의 문자열 번호로 대체 될 수 있지만 어떤 의미가 있으면 변수를 문자열에 포함시키는 방법을 모르겠습니다. 비록 그것이 int로 바뀌 었다고하더라도, 나는 여전히 조건 내에서 변수를 사용하는 방법을 모른다.

내가 생각할 수있는 유일한 것은 여러 개의 if 문을 작성하는 것인데, 실제로는 길다.

제안 사항? 텍스트 벽에 사과드립니다.

+0

명확하게 말하면 잠재적으로 여분의 줄이있는 원본이 있고 궁극적으로 줄 수 앞에 접두사가 붙은 고유 한 줄을 출력하겠습니까? 또한 주문이 중요합니까? – jdi

답변

5
그때의 값을 증가, 입력 파일의 라인을 통해 반복하고 찾아 각각에 대해 사전에 키를 삽입 좋을 것

처럼 regular expressions 뭔가를 찾고있을 수 있습니다 그 후에 발견 한 값의 각 인스턴스에 대해 하나씩 키를 누른 다음 해당 사전에서 출력 파일을 생성하십시오.

catalog = {} 
for line in input_file: 
    if line in catalog: 
     catalog[line] += 1 
    else: 
     catalog[line] = 1 

대안으로

from collections import defaultdict 
catalog = defaultdict(int) 
for line in input_file: 
    catalog[line] += 1 

그럼 그냥 그 DICT를 통해 실행하고 파일을 인쇄 할 수 있습니다.

+0

나는 이것이 그가 묻고있는 것이라고 생각한다. 내가 제안하려고했던 것과 동일합니다. – jdi

+1

@NolenRoyalty : 궁극적으로 나는 그것을 제안 할 것이지만, 그가 새로운 파이썬 프로그래머이기 때문에 처음으로 표준 사전 방식을 설명 한 후에 추가 정보 비트가되어야합니다. – jdi

+0

@jdi 충분하게, 해결책은 어느 것이 든 정확하다 (우리가 질문을 정확하게 이해했다고 가정 할 때). –

1

당신은

for line in text: 
    match = re.match(r'(\d+) x (.*)', line) 
    if match: 
     count = int(match.group(1)) 
     object_name = match.group(2) 
     ... 
+0

OP가 보여 주었던 패턴이 정말 선을 세지 않으려 고 어색한 접근이었고, 그가이 문자열을 미리 먹었을 때 미리 서식을 지정하고 다시 문장을 다시 채우고 싶다는 느낌을 받았습니다. – jdi

0

이 그것을 어떻게해야이 같은

a = [1,1,1,1,2,2,2,2,3,3,4,5,5] 
from itertools import groupby 
print ["%dx %s" % (len(list(group)), key) for key, group in groupby(a)] 
+1

특히 OP가 새로운 Python 프로그래머라는 점을 감안할 때이 대답에 대해서는 다소 덜 분명한 것 같습니다. – jdi

+0

그는 그가 빨리 붙잡는다 고 말했다. hehe 나는 이것이 OP를 돕기를 바란다. 그러나 이것이 공개 Q & A이고 나중에 초보자가 아닌 사람들이 나올 수도 있다는 것을 기억한다. – Trufa

+0

글쎄, 고급 무언가를 제안하려고한다면, 적어도 고정 문자열 연결을 사용하지 않도록 고쳐야한다 : 키에 대한'[ "% dx % s"% (len (list (group)), key), group in groupby (a)]' – jdi

0

뭔가?

list_of_things=['XXXX 1', 'YYYY 1', 'ZZZZ 1', 'AAAA 1', 'ZZZZ 2'] 

for line in list_of_things: 
    for e in ['ZZZZ','YYYY']: 
     if e in line: 
      print line 

출력 : (나는 당신의 질문을 이해하고 있다면 ...)

YYYY 1 
ZZZZ 1 
ZZZZ 2 

또한

0

문자열에 변수를 포함하려면 if line.startswith(e): 또는 정규식을 사용할 수 format()을 사용합니다 :

 
>>> i = 123 
>>> s = "This is an example {0}".format(i) 
>>> s 
'This is an example 123' 

이 경우, {0} 인디 케이션 변수를 넣으려고합니다. 변수가 더 많은 경우 을 사용하십시오 (따라서 각 변수의 숫자는 0부터 시작).

0

두 가지 옵션이 있습니다. 같은 1) 뭔가의 개수와 각 항목의 형식을 다음 목록 항목의 수를 캡처하는 사전을 사용하고 다음

list_of_things = ['sun', 'moon', 'green', 'grey', 'sun', 'grass', 'green'] 
listItemCount = {} 
countedList = [] 
for lines in list_of_thing: 
    if lines in listItemCount: 
     listItemCount[lines] += 1 
    else: 
     listItemCount[lines] = 1 
for id in listItemCount: 
    if listItemCount[id] > 1: 
     countedList.append(id+' - x'str(listItemCount[id])) 
    else: 
     countedList.append(id) 
for item in countedList: 
    print(item) 

의 출력 위

sun - x2 
grass 
green - x2 
grey 
moon 

또는 것 2)

import collections 

list_of_things = ['sun', 'moon', 'green', 'grey', 'sun', 'grass', 'green'] 
listItemCount = collections.Counter(list_of_things) 
listItemCountDict = dict(listItemCount) 
countedList = [] 
for id in listItemCountDict: 
    if listItemCountDict[id] > 1: 
     countedList.append(id+' - x'str(listItemCountDict[id])) 
    else: 
     countedList.append(id) 
for item in countedList: 
    print(item) 

아래와 같이 컬렉션을 사용하면 출력이 위의 것이 간단한 일을 만들

sun - x2 
grass 
green - x2 
grey 
moon