将列表转换为Python 3列表

时间:2016-03-18 13:25:39

标签: python list python-3.x text text-files

我有一个由汽车详细信息组成的列表文件。

e.g。

1000001 Volvo v8
1000002 Mazda 2.0

5 个答案:

答案 0 :(得分:5)

听起来你需要每行split;你可以使用列表理解,如下

cars = [line.split() for line in open("Cars.txt")]

如评论中所述;你想要数字的数字表示。为此,您需要将数字列转换为数字。例如。

for i in range(len(cars)):
    cars[i][0] = int(cars[i][0])
    cars[i][-1] = int(cars[i][-1])

然后,例如cars[0][0]将是一个数字。 或者,如果数字始终为正整数,则可以将其浓缩为:

readline = lambda l: [int(n) if n.isdigit() else n for n in l.split()]
cars = [[ readline(line) for line in open("Cars.txt")]

对于任何更复杂的数据文件读取,您可能希望使用例如pandas

<强>发电机

正如zondo在评论中指出的那样,您可能会考虑使用generator,而不会将所有数据加载到内存中(而是在请求时“生成”每个元素);这可以通过在理解中交换[] ()来完成:

cars = (line.split() for line in open("Cars.txt"))

然后你仍然可以按照列表的方式迭代汽车,但是不能索引到生成器中,就像列表一样。

答案 1 :(得分:2)

如果您想以正确的方式访问文本文件中的所有信息,您只需为其定义一个类。然后用文件中的信息填充它。这是一个示例实现。我在这里使用了unpack operator(*)。

class Car(object):

    def __init__(self, id, name, price):
        self.id = id
        self.name = name
        self.price = price

    def __str__(self):
        return self.id + ' ' + self.name + ' ' + self.price


file = open("file.txt", 'r')
cars = [Car(*line.split()) for line in file]

for c in cars:
    print c

如果您有一个非常大的文件,请使用生成器表达式

cars = (Car(*line.split()) for line in file)

在两种情况下都打印,

1000001 Volvo 34000
1000002 Mazda 23000

答案 2 :(得分:0)

这是使用list功能将结果存储在split中的方法:

cars = []

with open("cars.txt", 'r') as f:
    for line in f:
        cars.append(line.split())

如果您希望能够根据您的唯一ID快速搜索,最好使用字典。

答案 3 :(得分:0)

这是一种纯粹的python方式:

text = '1000001 Volvo 34000 1000002 Mazda 23000'

# Split text into one list
l = text.split()

# Split list into list of list every 3rd element
l = [l[i:i+3] for i in range(0, len(l), 3)]
print l
[['1000001', 'Volvo', '34000'], ['1000002', 'Mazda', '23000']]

答案 4 :(得分:-1)

可以使用regex来生成list tuple s:

import re

text = '1000001 Volvo 34000 1000002 Mazda 23000'

l = re.findall(r'(\d+) (\w+) (\d+)', text)
print l
[('1000001', 'Volvo', '34000'), ('1000002', 'Mazda', '23000')]

如果您确实需要list list,则可以转换它:

l = [list(x) for x in l]
print l
[['1000001', 'Volvo', '34000'], ['1000002', 'Mazda', '23000']]