Python 将列表拆分为[]

Python 将列表拆分为[],python,string,list,split,Python,String,List,Split,我有一份国家名单。对于每个国家,我都有一个地区和一个人口 i、 e[阿富汗,647500.02500100,阿尔巴尼亚,28748.02821977]和其他50个类似的国家 我试图将每组信息分成单独的[],例如: [["Afghanistan",647500.0,25500100],["Albania",28748.0,2821977]] 到目前为止,我有以下脚本: def readFile(): # I already have it so it reads the lists o

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


i、 e
[阿富汗,647500.02500100,阿尔巴尼亚,28748.02821977]
和其他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

下面是一个简单的方法:

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

(它返回元组而不是列表。如果对您来说很重要,可以很容易地进行更改。)

这里有一种简单的方法:

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

(它返回的是元组而不是列表。如果对您有影响,可以很容易地进行更改。)

新答案

现在我想我理解了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 ]
您可能还需要咨询,它具有为您执行某些操作的功能

一行演示


事先回答

另一种简单易懂的解决方案是,使用列表理解将列表拆分为大小为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]]
此解决方案使用
范围
获取有一个国家(每三个元素)划分原始列表的索引。
新答案

现在我想我理解了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 ]
您可能还需要咨询,它具有为您执行某些操作的功能

一行演示


事先回答

另一种简单易懂的解决方案是,使用列表理解将列表拆分为大小为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]]
此解决方案使用
范围
获取有一个国家(每三个元素)划分原始列表的索引。

  • 您当前的代码有缺陷

    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
    
  • 你需要阅读你的文件。很难说它是什么格式的。您可能需要使用该模块

  • 看起来您可能想从中查看
    石斑鱼
    配方

  • 您当前的代码有缺陷

    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
    
  • 你需要阅读你的文件。很难说它是什么格式的。您可能需要使用该模块

  • 看起来您可能想从中查看
    石斑鱼
    配方


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

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

    如果已经有一个非常好的库用于拆分和分组,那么就没有必要乱来了。

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

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


    如果已经有一个非常好的库来进行拆分和分组,那么就没有必要乱来了。

    总是有3个元素需要分组吗?
    [Afghanistan,647500.0,25500100,阿尔巴尼亚,28748.02821977]
    不是一个有效的列表(假设
    Afghanistan
    阿尔巴尼亚
    不是变量)。您的实际输入和输出是什么?该文件看起来像什么?该文件是一个.txt文件,区域和人口之间用缩进分隔,然后换行到下一个国家。例如:阿富汗,647500.0,25500100阿尔巴尼亚,28748.0,28219777阿尔及利亚,2381740.0,38700000我想OP实际需要的是使用。总是有3个元素需要分组吗?
    [阿富汗,647500.0,25500100,阿尔巴尼亚,28748.02821977]
    不是一个有效的列表(假设
    阿富汗
    阿尔巴尼亚
    不是变量)。您的实际输入和输出是什么?该文件看起来像什么?该文件是一个.txt文件,用缩进分隔区域和人口,然后换行到下一个国家。例如:阿富汗、647500.0、25500100阿尔巴尼亚、28748.0、2821977阿尔及利亚、2381740.0、3870000我想OP实际需要的是使用。感谢e响应,但我需要让python读取my file.txt并通过[]分隔每组信息感谢您的响应,但我需要让python读取my file.txt并通过[]分隔每组信息,但我不能在脚本中使用列表中的直接文本。python必须读取列表-->然后分隔每个[国家、地区、人口]立即。当我在shell@user3207521:好的,我想我现在更了解你的问题了。请看我更新的答案。很好,我的国家以[]分隔,但现在在每个组的开头,它都有[]。我如何才能摆脱这些呢?@user3207521:你可以使用
    strip()
    而不是
    rstrip()
    。查看我的更新答案。我将其更改为该答案,并且仍然会出现一个集合['津巴布韦'、'\t390580.0'、'\t12973808'],但我无法在脚本中使用列表中的直接文本。Python必须读取列表-->然后立即将每个[country、area、population]分隔开。当我这样做时,我会读取文件(“countries.txt”)在shell@user3207521:好的,我想我现在更了解你的问题了。请看我更新的答案。很好,我的国家以[]分隔,但现在在每个组的开头,它都有[]。我如何才能摆脱这些呢?@user3207521:你可以使用
    strip()
    而不是
    rstrip()
    。请参阅我的更新答案。我将其更改为该答案,但仍有一组答案显示为['津巴布韦','\t390580.0','\t12973808']