将列表拆分为[]

2024-04-25 19:04:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份国家名单。对于每个国家,我都有一个地区和一个人口。你知道吗

例如[Afghanistan, 647500.0, 25500100, Albania,28748.0,2821977]和其他50个类似的。你知道吗

我试图将每组信息分为单独的[]例如:

[["Afghanistan",647500.0,25500100],["Albania",28748.0,2821977]] 

到目前为止我有这个剧本:

def readFile():
    # I already have it so it reads the lists of countries.

    try:

        linestring = open(filename).readlines()
        linestring = linestring.split("\r")
        linestring = linestring.split("\n")

            print linestring

Tags: 信息defhaveit国家地区split人口
3条回答

您的注释描述了一个以制表符分隔、换行分隔的文本文件。Python有一个module,可以方便地读取和写入正是这种格式的文件。您的应用程序示例如下:

import csv
with open(filename, 'rb') as f:
    grouped = list(csv.reader(f, delimiter='\t'))
    print grouped

如果已经有一个非常好的库可以实现这一目的,那么就没有必要在拆分和分组的问题上混日子了。你知道吗

新答案:

现在我想我已经理解了OP的要求,下面是一个使用列表理解加载CSV文件的快速演示。你知道吗

>>> arrs = [ l.rstrip().split(",\t") for l in open(filename) ]

然后,由于有些数据是整数,您可能需要将它们从字符串转换为:

>>> data = [ [arr[0], int(arr[1]), int(arr[2])] for arr in arrs ]

您可能还需要查阅csv module,它有一些函数可以为您完成这些工作。你知道吗

一行的演示

>>> l = "Zimbabwe,\t390580.0,\t12973808\n"
>>> l.rstrip().split(",\t")
['Zimbabwe', '390580.0', '12973808']

<罢工>事先回答

一个不同的,容易理解的解决方案是把你的列表分成3个大小的子列表。你知道吗

>>> sublist_size = 3
>>> L = ["Afghanistan", 647500.0, 25500100, "Albania",28748.0,2821977]
>>> grouped = [ L[i:i+sublist_size] for i in range(0, len(L), sublist_size) ]
>>> grouped
[['Afghanistan', 647500.0, 25500100], ['Albania', 28748.0, 2821977]]

这个解决方案使用range来获得索引,其中有一个国家(每三个元素)来分割原始列表。 你知道吗

这里有一个简单的方法:

In [5]: l = ['Afghanistan', 647500.0, 25500100, 'Albania',28748.0,2821977]

In [6]: zip(*(l[n::3] for n in range(3)))
Out[6]: [('Afghanistan', 647500.0, 25500100), ('Albania', 28748.0, 2821977)]

(尽管它返回元组而不是列表。如果对你来说很重要的话,很容易改变。)

相关问题 更多 >

    热门问题