首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表转换为列表Python 3

将列表转换为列表Python 3
EN

Stack Overflow用户
提问于 2016-03-18 21:25:39
回答 5查看 91关注 0票数 2

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

例如:

代码语言:javascript
复制
1000001 Volvo v8
1000002 Mazda 2.0
EN

回答 5

Stack Overflow用户

发布于 2016-03-18 21:29:23

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

代码语言:javascript
复制
cars = [line.split() for line in open("Cars.txt")]

正如注释中所提到的,您需要数字的数字表示。为此,您需要将数字列转换为数字。例如。

代码语言:javascript
复制
for i in range(len(cars)):
    cars[i][0] = int(cars[i][0])
    cars[i][-1] = int(cars[i][-1])

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

代码语言:javascript
复制
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,它不会将所有数据加载到内存中(而是在请求时“生成”每个元素);这可以通过将理解中的[]替换为()来实现:

代码语言:javascript
复制
cars = (line.split() for line in open("Cars.txt"))

然后,您仍然可以像遍历列表一样遍历汽车,但是不能像遍历列表那样对生成器进行索引。

票数 5
EN

Stack Overflow用户

发布于 2016-03-18 21:40:23

如果您想要一种适当的方式来访问文本文件中的所有信息,您可以简单地为它定义一个类。然后用文件中的信息填充它。下面是一个示例实现。我在这里使用了unpack operator (*)。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
cars = (Car(*line.split()) for line in file)

在这两种情况下都会打印,

代码语言:javascript
复制
1000001 Volvo 34000
1000002 Mazda 23000
票数 2
EN

Stack Overflow用户

发布于 2016-03-18 21:29:32

下面是使用split函数将结果存储在list中的方法:

代码语言:javascript
复制
cars = []

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36085607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档