将字符串分解为Python中的字符列表

时间:2012-03-23 02:32:20

标签: python list readlines

所以我想要做的就是从.txt文件中取出一行txt,然后将字符分配给一个列表,然后创建列表中所有单独字符的列表。

列表清单。

目前,我已经尝试过:

fO = open(filename, 'rU')
fL = fO.readlines()

这就是我的最爱。我不太清楚如何提取单个字符并将它们分配给新列表。

我想做类似的事情:

fL = 'FHFF HHXH XXXX HFHX' 

^^^所以我是从.txt文件获得的行。

然后把它变成这个:

['F', 'H', 'F', 'F', 'H' ...] 

^^^并且是新列表,每个字符都在其上。

10 个答案:

答案 0 :(得分:110)

您可以使用list执行此操作:

fNewList=list(fL);

请注意,据我所知,该行中的任何空格都将包含在此列表中。

答案 1 :(得分:52)

我似乎有点迟了,但是......

a='hello'
print list(a)
# ['h','e','l','l', 'o']

答案 2 :(得分:19)

字符串是可迭代的(就像列表一样)。

我正在解释你真的想要的东西:

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)

字符将包含文件中的所有字符。

答案 3 :(得分:8)

因此,要将字符串hello作为单个字符添加到列表中,请尝试以下操作:

newlist = []
newlist[:0] = 'hello'
print (newlist)

  ['h','e','l','l','o']

但是,这样做更容易:

splitlist = list(newlist)
print (splitlist)

答案 4 :(得分:7)

fO = open(filename, 'rU')
lst = list(fO.read())

答案 5 :(得分:4)

或者使用花哨的列表理解,当使用非常大的文件/列表时,它们应该是“计算效率更高”

fd = open(filename,'r')
chars = [c for line in fd for c in line if c is not " "]
fd.close()

顺便说一下:接受的答案没有考虑到空白......

答案 6 :(得分:4)

.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    fret = input.getText().toString();
                    button.setText(fret);
                }
            })
  

['h','e','l','l','o','','w','o','r','l','d']

一种简单的方法是使用“map()”函数。

答案 7 :(得分:3)

在python中,许多东西都是可迭代的,包括文件和字符串。 迭代文件处理程序会为您提供该文件中所有行的列表。 迭代字符串会为您提供该字符串中所有字符的列表。

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

他的方法更好,除非您希望能够指定要抓取哪些线 list(itertools.chain.from_iterable(open(filename, 'rU)))

然而,这需要熟悉itertools,因此会失去一些可读性

如果你只想迭代字符,而不关心存储列表,那么我会使用嵌套的for循环。这种方法也是最具可读性的。

答案 8 :(得分:1)

Python3.5 +允许使用PEP 448 - Extended Unpacking Generalizations

>>> string = 'hello'
>>> [*string]
['h', 'e', 'l', 'l', 'o']

这是语言语法的规范,因此它比调用list更快:

>>> from timeit import timeit
>>> timeit("list('hello')")
0.3042821969866054
>>> timeit("[*'hello']")
0.1582647830073256

答案 9 :(得分:0)

因为字符串是(不可变的)序列,所以它们可以像列表一样解压:

with open(filename, 'rU') as fd:
    multiLine = fd.read()
    *lst, = multiLine

运行map(lambda x:x,multiLine)时,这显然更有效,但是实际上它返回的是地图对象而不是列表。

with open(filename, 'rU') as fd:
    multiLine = fd.read()
    list(map(lambda x: x, multiLine))

将地图对象转换为列表将比拆包方法花费更长的时间。