파이썬에서 문자열을 문자 목록으로 나누기
기본적으로 저는 파일에서 텍스트 한 줄을 빨아 들이고, 문자를 목록에 할당하고, 목록에있는 모든 개별 문자 목록 (목록 목록)을 만들고 싶습니다.
현재 나는 이것을 시도했습니다.
fO = open(filename, 'rU')
fL = fO.readlines()
그게 내가 가진 전부입니다. 단일 문자를 추출하여 새 목록에 할당하는 방법을 잘 모릅니다.
파일에서 얻은 줄은 다음과 같습니다.
fL = 'FHFF HHXH XXXX HFHX'
이 목록으로 바꾸고 싶습니다. 각각의 문자는 다음과 같습니다.
['F', 'H', 'F', 'F', 'H', ...]
문자열은 반복 가능합니다 (목록처럼).
나는 당신이 정말로 원하는 것을 해석하고 있습니다.
fd = open(filename,'rU')
chars = []
for line in fd:
for c in line:
chars.append(c)
또는
fd = open(filename, 'rU')
chars = []
for line in fd:
chars.extend(line)
또는
chars = []
with open(filename, 'rU') as fd:
map(chars.extend, fd)
chars는 파일의 모든 문자를 포함합니다.
list를 사용하여이 작업을 수행 할 수 있습니다 .
new_list = list(fL)
내가 아는 한 줄의 모든 공백이이 목록에 포함된다는 점에 유의하십시오.
조금 늦었을 것 같은데 ...
a='hello'
print list(a)
# ['h','e','l','l', 'o']
따라서 문자열 hello
을 개별 문자로 목록 에 추가하려면 다음을 시도하십시오.
newlist = []
newlist[:0] = 'hello'
print (newlist)
['h','e','l','l','o']
그러나 이렇게하는 것이 더 쉽습니다.
splitlist = list(newlist)
print (splitlist)
fO = open(filename, 'rU')
lst = list(fO.read())
또는 매우 큰 파일 / 목록으로 작업 할 때 "계산적으로 더 효율적"이어야하는 멋진 목록 이해를 사용합니다.
fd = open(filename,'r')
chars = [c for line in fd for c in line if c is not " "]
fd.close()
Btw : 수락 된 답변은 공백을 고려하지 않습니다 ...
a='hello world'
map(lambda x:x, a)
[ 'h', 'e', 'l', 'l', 'o', '', 'w', 'o', 'r', 'l', 'd']
쉬운 방법은 "map ()"함수를 사용하는 것입니다.
파이썬에서는 파일과 문자열을 포함하여 많은 것을 반복 할 수 있습니다. 파일 핸들러를 반복하면 해당 파일의 모든 행 목록이 제공됩니다. 문자열을 반복하면 해당 문자열의 모든 문자 목록이 제공됩니다.
charsFromFile = []
filePath = r'path\to\your\file.txt' #the r before the string lets us use backslashes
for line in open(filePath):
for char in line:
charsFromFile.append(char)
#apply code on each character here
또는 원 라이너를 원한다면
#the [0] at the end is the line you want to grab.
#the [0] can be removed to grab all lines
[list(a) for a in list(open('test.py'))][0]
.
.
편집 : agf가 언급했듯이 사용할 수 있습니다. itertools.chain.from_iterable
His method is better, unless you want the ability to specify which lines to grab list(itertools.chain.from_iterable(open(filename, 'rU)))
This does however require one to be familiar with itertools, and as a result looses some readablity
If you only want to iterate over the chars, and don't care about storing a list, then I would use the nested for loops. This method is also the most readable.
Python3.5+ allows the use of PEP 448 - Extended Unpacking Generalizations:
>>> string = 'hello'
>>> [*string]
['h', 'e', 'l', 'l', 'o']
This is a specification of the language syntax, so it is faster than calling list
:
>>> from timeit import timeit
>>> timeit("list('hello')")
0.3042821969866054
>>> timeit("[*'hello']")
0.1582647830073256
Because strings are (immutable) sequences they can be unpacked similar to lists:
with open(filename, 'rU') as fd:
multiLine = fd.read()
*lst, = multiLine
When running map(lambda x: x, multiLine) this is clearly more efficient, but in fact it returns a map object instead of a list.
with open(filename, 'rU') as fd:
multiLine = fd.read()
list(map(lambda x: x, multiLine))
Turning the map object into a list will take longer than the unpacking method.
ReferenceURL : https://stackoverflow.com/questions/9833392/break-string-into-list-of-characters-in-python
'development' 카테고리의 다른 글
/ sdcard에 디렉토리 생성 실패 (0) | 2020.12.31 |
---|---|
데이터 테이블 날짜 정렬 dd / mm / yyyy 문제 (0) | 2020.12.31 |
NSLog (@ "Inside of the iPhone Simulator")로 어떻게 디버깅합니까? (0) | 2020.12.31 |
일반 목록의 표준 편차? (0) | 2020.12.31 |
MB로 파일 크기를 얻는 방법? (0) | 2020.12.31 |