跳过列表,直接转到lis

2024-09-27 21:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我从文本文件中读取行,然后将它们以2个字符对插入到列表中
例如hello = ['he','el','ll','lo']。 在我当前的代码中,行的初始读取会将每一行转换为它自己的列表,然后将其放入一个列表中,从而得到一个列表列表。因此这两条线
hello
world
给我列表[[['he','el','ll','lo'], ['wo','or','rl','ld']]。我可以用这段代码和singleList = sum(listlist,[])这将给我一个单一的列表,但是这是低效的,因为它在列表上迭代了两次(我读到一个注释说这是一个糟糕的方法做它放在第一位)。你知道吗

如何获取代码,并在第一次传递时将行中的值输入到单个列表中?你知道吗

def countPairs():
    print ()
    inFile = open("hello.txt", "r")
    n = 2
    linsiz = []
    for line in inFile:
        line.rstrip('\n')
        linsiz.append([line[i:i+2] for i in range(0,len(line),1)])
    print (linsiz)
    singleList = sum(linsiz,[])
    print (singleList)
countPairs()

不管是谁提出了可能的复制,他都试图关闭线程。这根本不能回答我的问题。我很确信他们甚至没有读我的帖子,而是认出了一些有hello = ['he','el','ll','lo']的东西,并认为“低点海报,让它关闭”。白痴。你知道吗


Tags: 代码hellolo列表forlineelinfile
3条回答

这个小小的改变就可以了:

for line in inFile:
    line.rstrip('\n')
    for i in range(0,len(line),1):
        linsiz.append(line[i:i+2])

您使用的是列表理解,它返回一个列表,您的附加行将一个新列表附加到您的列表中。您正在将一个新值推入列表中,但该值是一个列表,因此它将生成一个列表列表。你知道吗

似乎你想做的是把这些列表附加到你的列表中,比如:

# linsiz is an array.
linsiz += [line[i:i+2] for i in range(0,len(line),1)]

这与执行:[]+[]或将两个列表串联在一起是相同的。你知道吗

有一个标准库,完全用于公共迭代方法,称为^{}。你知道吗

您的应用程序听起来最需要itertools.chain.from_iterable()

from itertools import chain
with open('filename.txt') as f:
    for letter in chain.from_iterable(f):
        do_stuff(letter)

相关问题 更多 >

    热门问题