development

파이썬에서 문자열을 문자 목록으로 나누기

big-blog 2020. 12. 31. 23:19
반응형

파이썬에서 문자열을 문자 목록으로 나누기


기본적으로 저는 파일에서 텍스트 한 줄을 빨아 들이고, 문자를 목록에 할당하고, 목록에있는 모든 개별 문자 목록 (목록 목록)을 만들고 싶습니다.

현재 나는 이것을 시도했습니다.

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

반응형