python 提取下三角矩阵里的元素,并按大小排序

如题,我现在有一个500*500的大矩阵,是一个下三角矩阵,对角线以上全为0,我现在只想把下三角的元素提取出来,排成一列,然后按从小到大排列。python编程,希望大神帮帮忙!(^人^)(^人^)(^人^)
矩阵是在一个txt文件里,包括抬头标题行和侧面列,这个不需要读取,如下只是一部分

第1个回答  推荐于2016-12-01
说下我的思路:
按行读取文件,把行按空格分割成列表。从第三行起,每行取值的范围为列表的[ 第2行:行数-1]。
因为列表是从0开始的,xrange取值是左闭右开。所以是line[1:行数]。
最后再把这个列表拍个序就行了。
不会使用numby,所以就用一般的列表代替了。可以使用numby改写下,性能可以提高不少。

def get_trangle(filepath):
resultList = []
with open(filepath, 'r') as foo:
for index, line in enumerate(foo.readlines()):
line_list = line.split()
resultList.extend([float(line_list[i])
for i in xrange(1, index) if index > 1])
print sorted(resultList)追问

太谢谢了!好使好用,我觉得代码写得简洁,易懂,验证没有问题,比我这菜鸟写那种套循环的累赘代码好看多了!
顺便想问一下resultList.extend([float(line_list[i]) for i in xrange(1, index) if index > 1])

这句的for写法算什么?比普通的for循环的结构优势在哪?因为总看到大家这么写O(∩_∩)O~

追答

列表推导,可以看下这个帖子。
http://python.jobbole.com/80823/

实乃杀人越货,装逼利器!

本回答被提问者和网友采纳