Skip to main content
 首页 » 编程设计

Python之从列创建列表

2025年05月04日12虾米哥

我如何从中创建(两列,固定宽度):

0.35    23.8 
0.39    23.7 
0.43    23.6 
0.47    23.4 
0.49    23.1 
0.51    22.8 
0.53    22.4 
0.55    21.6 

两个列表:

list1 = [0.35, 0.39, 0.43, ...] 
list2 = [23.8, 23.7, 23.6, ...] 

谢谢。

请您参考如下方法:

可能你正在寻找这样的东西

>>> str1 = """0.35    23.8 
0.39    23.7 
0.43    23.6 
0.47    23.4 
0.49    23.1 
0.51    22.8 
0.53    22.4 
0.55    21.6""" 
>>> zip(*(e.split() for e in str1.splitlines())) 
[('0.35', '0.39', '0.43', '0.47', '0.49', '0.51', '0.53', '0.55'), ('23.8', '23.7', '23.6', '23.4', '23.1', '22.8', '22.4', '21.6')] 

您可以轻松扩展上述解决方案以适应任何类型的可迭代对象,包括文件

>>> with open("test1.txt") as fin: 
    print zip(*(e.split() for e in fin)) 
 
 
[('0.35', '0.39', '0.43', '0.47', '0.49', '0.51', '0.53', '0.55'), ('23.8', '23.7', '23.6', '23.4', '23.1', '22.8', '22.4', '21.6')] 

如果你想要数字作为 float ,而不是字符串,你需要通过 float 函数可能通过 map 传递它

>>> zip(*(map(float, e.split()) for e in str1.splitlines())) 
[(0.35, 0.39, 0.43, 0.47, 0.49, 0.51, 0.53, 0.55), (23.8, 23.7, 23.6, 23.4, 23.1, 22.8, 22.4, 21.6)] 

最后将其解压到两个单独的列表中

>>> from itertools import izip 
>>> column_tuples = izip(*(map(float, e.split()) for e in str1.splitlines())) 
>>> list1, list2 = map(list, column_tuples) 
>>> list1 
[0.35, 0.39, 0.43, 0.47, 0.49, 0.51, 0.53, 0.55] 
>>> list2 
[23.8, 23.7, 23.6, 23.4, 23.1, 22.8, 22.4, 21.6] 

它是如何工作的

zip获取可迭代列表并为每个迭代器返回成对元组列表。 itertools.izip 类似,但不是返回成对元组列表,而是返回成对元组的迭代器。这将对内存更友好

map对迭代器的每个元素应用一个函数。所以 map(float, e.split) 会将字符串转换为 float 。请注意,表示 map 的另一种方法是通过 LC 或生成器表达式

最后str.splitlines将换行符分隔的字符串转换为单行列表。