如何在python中循环列表?

时间:2017-06-07 13:14:47

标签: python python-3.x

我是python的新手,我想创建一个列表列表。

student_details.txt包含以下数据:

101 Rahul
102 Julie
103 Helena
104 Kally

CODE

lis = []

with open("student_details.txt" , "r+") as f:    
    for i in range(1,3,1):
        for data in f.read().split():
            lis.append(data)
print(lis)

我想要的输出

[[101,Rahul],[102,Julie],[103,Helena],[104,Kally]]

输出我

['101','Rahul','102','Julie','103','Helena','104','Kally']

5 个答案:

答案 0 :(得分:3)

您可以逐行读取句柄或使用readlines(),拆分每一行,附加每个结果等等...修复代码需要删除刚刚读取的range循环该文件3次(但只有第一次有效读取),并附加行的分割项,使用列表理解更加pythonic:

with open("student_details.txt" , "r+") as f:    
     lis = [line.split() for line in f]

请注意,line.split()(没有参数)的好处是它会自动删除行终止符。

但你可以更简单:csv模块为你做所有的解析:

import csv
with open("student_details.txt" , "r") as f:
   cr = csv.reader(f,delimiter=" ")
   # iterate on rows and generate list of lists:
   result = list(cr)

答案 1 :(得分:1)

您可以按行分割:

lis = []

with open("student_details.txt" , "r+") as f:    
    for line in f:
       data = line.split()
       lis.append(data)
print(lis)

结果:

[['101', 'Rahul'], ['102', 'Julie'], ['103', 'Helena'], ['104', 'Kally']]

或者以更紧凑的方式:

with open("student_details.txt" , "r+") as f:    
    lis = [line.split() for line in f]
print(lis)

结果:

[['101', 'Rahul'], ['102', 'Julie'], ['103', 'Helena'], ['104', 'Kally']]

答案 2 :(得分:1)

您的代码:

lis = []

with open("student_details.txt" , "r+") as f:    
    for i in range(1,3,1):
        for data in f.read().split():
            lis.append(data)
print(lis)

注意两个for循环,你正在做的是遍历每一行,然后遍历该行的每个项目。然后,您将每个项目分别推送到列表lis。 要获得所需的输出,您需要将每行上的两个项目列表推送到列表中。 您实际上已经使用f.read().split()生成了此项列表,因此您只需要附加此项。 这将为您提供以下内容:

lis = []

with open("student_details.txt" , "r+") as f:    
    for i in range(1,3,1):
        #no second loop here
        data = f.read().split()
        lis.append(data)
print(lis)

这仍然没有给我们正确的答案,循环是这里的问题, 我们可以通过只是在理论上读取每一行来解决这个问题,而不指定任何范围:

lis = []

with open("student_details.txt" , "r+") as f:    
    for line in f:
        #no second loop here
        data = line.split()
        lis.append(data)
print(lis)

答案 3 :(得分:1)

最简单的方法是通过list理解来完成以下操作:

with open("student_details.txt" , "r+") as f:
    lis = [line.split() for line in f]

或者如果你想loop,你可以loop通过文件而不读它:

with open("student_details.txt" , "r+") as f:    
    lis = []
    for line in f:
        lis.append(line.split())

答案 4 :(得分:0)

您也可以尝试这种替代方案。我使用了splitlines()方法。

data = []
f = open('student_details.txt', 'r')
for line in f.read().splitlines():
    data.append([line])
print(data)