将列表拆分为[]

时间:2014-02-11 21:25:26

标签: python string list split

我有一份国家/地区列表。对于每个国家,我都有一个地区和人口。

[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

4 个答案:

答案 0 :(得分:2)

新答案

现在我想我理解了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来获取有一个国家/地区(每三个元素)的索引来拆分原始列表。

答案 1 :(得分:2)

您的评论描述了制表符分隔的换行符分隔文本文件。 Python有一个module,便于从具有该格式的文件中读取和写入。您的应用程序的一个示例是:

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

当有一个非常好的库已经用于此目的时,没有必要进行拆分和分组。

答案 2 :(得分:1)

这是一种简单的方法:

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)]

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

答案 3 :(得分:0)

  1. 您当前的代码存在缺陷。

    linestring = open(filename).readlines() # returns a list of lines
    linestring = linestring.split("\r") # lists don't have a split method!
    linestring = linestring.split("\n") # even if split worked, this would be a list now
    
  2. 您需要阅读文件。很难说出它的格式。你可能想要使用json模块。

  3. 您可能希望查看itertools documentation中的grouper 食谱