이 코드가 있습니다 (문자열의 모든 순열 발생 인쇄)
def splitter(str):
for i in range(1, len(str)):
start = str[0:i]
end = str[i:]
yield (start, end)
for split in splitter(end):
result = [start]
result.extend(split)
yield result
el =[];
string = "abcd"
for b in splitter("abcd"):
el.extend(b);
unique = sorted(set(el));
for prefix in unique:
if prefix != "":
print "value " , prefix , "- num of occurrences = " , string.count(str(prefix));
문자열 varaible에있는 모든 순열 발생을 인쇄하고 싶습니다.
순열이 같은 길이가 아니기 때문에 너비를 수정하고 다음과 같이 멋지게 인쇄하고 싶습니다.
value a - num of occurrences = 1
value ab - num of occurrences = 1
value abc - num of occurrences = 1
value b - num of occurrences = 1
value bc - num of occurrences = 1
value bcd - num of occurrences = 1
value c - num of occurrences = 1
value cd - num of occurrences = 1
value d - num of occurrences = 1
어떻게 할 수 format
있습니까?
이 게시물을 찾았지만 영숫자 문자열과 잘 어울리지 않았습니다.
답변
편집 2013-12-11- 이 답변은 매우 오래되었습니다. 여전히 유효하고 정확하지만이를 보는 사람들은 새로운 형식 구문을 선호해야 합니다 .
다음 과 같은 문자열 형식을 사용할 수 있습니다 .
>>> print '%5s' % 'aa'
aa
>>> print '%5s' % 'aaa'
aaa
>>> print '%5s' % 'aaaa'
aaaa
>>> print '%5s' % 'aaaaa'
aaaaa
원래:
%
문자 정보 용은 토큰으로 대체 뭔가있을 것이다 파이썬s
토큰 파이썬 문자 정보 용은 문자열입니다5
패드 (또는 당신이 원하는대로 번호) 정보 용 파이썬 (5 개) 문자를 공백 문자열까지.
특정 경우에 가능한 구현은 다음과 같습니다.
>>> dict_ = {'a': 1, 'ab': 1, 'abc': 1}
>>> for item in dict_.items():
... print 'value %3s - num of occurances = %d' % item # %d is the token of integers
...
value a - num of occurances = 1
value ab - num of occurances = 1
value abc - num of occurances = 1
참고 : itertools
모듈 의 존재를 알고 있는지 궁금합니다 . 예를 들어 다음을 사용하여 한 줄에 모든 조합 목록을 얻을 수 있습니다.
>>> [''.join(perm) for i in range(1, len(s)) for perm in it.permutations(s, i)]
['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'ba', 'bc', 'bd', 'ca', 'cb', 'cd', 'da', 'db', 'dc', 'abc', 'abd', 'acb', 'acd', 'adb', 'adc', 'bac', 'bad', 'bca', 'bcd', 'bda', 'bdc', 'cab', 'cad', 'cba', 'cbd', 'cda', 'cdb', 'dab', 'dac', 'dba', 'dbc', 'dca', 'dcb']
combinations
와 함께 사용하여 발생 횟수를 얻을 수 count()
있습니다.
답변
내가 사용 찾을 str.format
훨씬 더 우아한 :
>>> '{0: <5}'.format('ss')
'ss '
>>> '{0: <5}'.format('sss')
'sss '
>>> '{0: <5}'.format('ssss')
'ssss '
>>> '{0: <5}'.format('sssss')
'sssss'
문자열을 오른쪽으로 정렬하려면 >
대신 다음을 사용하십시오 <
.
>>> '{0: >5}'.format('ss')
' ss'
편집 : 주석에서 언급했듯이 0은에 전달 된 인수의 인덱스를 나타냅니다 str.format()
.
답변
원래 @ 0x90의 답변에 대한 편집으로 게시되었지만 게시물의 원래 의도에서 벗어난 것으로 거부되어 댓글이나 답변으로 게시하도록 권장했기 때문에 여기에 짧은 글을 포함했습니다.
@ 0x90의 답변 외에도 @ user2763554의 설명에 따라 너비에 대한 변수를 사용하여 구문을 더 유연하게 만들 수 있습니다.
width=10
'{0: <{width}}'.format('sss', width=width)
또한 숫자 만 사용하고에 전달 된 인수의 순서에 따라이 표현식을 더 짧게 만들 수 있습니다 format
.
width=10
'{0: <{1}}'.format('sss', width)
또는 최대, 잠재적으로 비 파이썬 묵시적, 간결함을 위해 모든 숫자를 생략하십시오.
width=10
'{: <{}}'.format('sss', width)
2017-05-26 업데이트
Python 3.6 에 형식화 된 문자열 리터럴 (줄여서 “f-strings”) 이 도입 됨에 따라 이제 더 간단한 구문으로 이전에 정의 된 변수에 액세스 할 수 있습니다.
>>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
이것은 문자열 형식에도 적용됩니다.
>>> width=10
>>> string = 'sss'
>>> f'{string: <{width}}'
'sss '
답변
format
확실히 가장 우아한 방법이지만 파이썬 logging
모듈에서는 사용할 수 없으므로 %
형식을 사용하여 수행 할 수있는 방법은 다음과 같습니다.
formatter = logging.Formatter(
fmt='%(asctime)s | %(name)-20s | %(levelname)-10s | %(message)s',
)
여기서는 -
왼쪽 정렬을 s
나타내고 앞의 숫자 는 고정 너비 를 나타냅니다.
일부 샘플 출력 :
2017-03-14 14:43:42,581 | this-app | INFO | running main
2017-03-14 14:43:42,581 | this-app.aux | DEBUG | 5 is an int!
2017-03-14 14:43:42,581 | this-app.aux | INFO | hello
2017-03-14 14:43:42,581 | this-app | ERROR | failed running main
더 많은 정보는 https://docs.python.org/2/library/stdtypes.html#string-formatting-operations
답변
>>> print(f"{'123':<4}56789")
123 56789