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