我正在从文本文件中读取行,然后将它们插入到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']
并且认为“低点海报,让我们把它关闭”的东西。白痴。
答案 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']