跳过列表清单,直接列出

时间:2018-01-18 21:14:00

标签: python list

我正在从文本文件中读取行,然后将它们插入到2个字符对的列表中 例如hello = ['he','el','ll','lo']。 在我当前的代码中,行的初始读取将每行转换为自己的列表,然后将THAT放入列表中,为我提供列表列表。这样就是两条线 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()

无论谁建议可能的重复都是tryharding来关闭线程。这甚至没有远程回答我的问题。我相信他们甚至没有读过我的帖子,而是认出了hello = ['he','el','ll','lo']并且认为“低点海报,让我们把它关闭”的东西。白痴。

9 个答案:

答案 0 :(得分:2)

这个小改动会做到这一点:

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

答案 1 :(得分:1)

有一个标准库,专门用于称为itertools的常见迭代方法。

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

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

答案 2 :(得分:0)

您正在使用列表推导,它会返回一个列表,您的追加行会在列表中附加一个新列表。您正在将新值推入列表中,但该值是一个列表,因此它会列出一个列表。

似乎您想要做的是将列表附加到列表中,如下所示:

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

与执行相同:[] + [],或连接2个列表。

答案 3 :(得分:0)

不要使用linsiz.append(),在列表中插入新元素。您希望将新列表连接到现有列表,所以:

linsiz += [line[i:i+2] for i in range(len(line))]

for i in range(len(line)):
    linsize.append(line[i:i+2])

答案 4 :(得分:0)

您只需使用extend

即可
def countPairs():
    print()
    with open("hello.txt") as lines:
        linsiz = []
        for line in lines:
            line = line.rstrip('\n')
            linsiz.extend(line[i:i+2] for i in range(len(line)))
    print(linsiz)

答案 5 :(得分:0)

您应该extend列表,也可以只使用生成器表达式,不需要使用任何中间列表,只需使用:

linsiz.extend(line[i:i+2] for i in range(0,len(line),1))

答案 6 :(得分:0)

这是使用可迭代的一种方法:

def readPairs(file):
    for line in file:
        for i in range(0, len(line) -1):
            yield line[i:i+2]

def countPairs():
    inFile = open("hello.txt", "r")
    singleList = [pair for pair in readPairs(inFile)];
    print(singleList)

countPairs()

答案 7 :(得分:0)

如果您想要调试和查看某些内容,请使用一个小函数为您提供每个单词的块:

def splitWord(word):
    """yields your 2-character tuplles from your word"""
    last = word[0]
    for n in word[1:]:  # skips first, thats already in last at start
        yield  last+n
        last = n 

def countPairs():
    print ()
    inFile = open("hello.txt", "r")
    n = 2
    linsiz = []

    for line in inFile:
        line.rstrip('\n')
        linsiz.extend(splitWord(line)) # adds all elements of iterable as elements to list
    print (linsiz) 

countPairs()

答案 8 :(得分:0)

只是把列表放在函数之外?

final_list=[]
def countPairs():
    inFile = open("filea.txt", "r")
    for line in inFile:
        for j in range(0,len(line.strip()),1):
            data=line[j:j+2].strip()
            if len(data)==1:
                pass
            else:
                final_list.append(data)
countPairs()

print(final_list)

输出:

['he', 'el', 'll', 'lo', 'wo', 'or', 'rl', 'ld']