2016-04-27 67 views
-5

因此,我有一个包含大约40万个列表的文本文件,其中大部分看起来像这样。如何对大量列表进行排序以获得最长列表的前10位

100005 127545 202036 257630 362970 376927 429080 
10001 27638 51569 88226 116422 126227 159947 162938 184977 188045 
191044 246142 265214 290507 296858 300258 341525 348922 359832 365744 
382502 390538 410857 433453 479170 489980 540746 
10001 27638 51569 88226 116422 126227 159947 162938 184977 188045 
191044 246142 265214 290507 300258 341525 348922 359832 365744 382502 

到目前为止,我有一个循环,逐行进行并将当前行转换为临时数组列表。

我将如何创建列表中包含整个文件中最多元素的列表的前十名单。

这是我现在的代码。

file = open('node.txt', 'r') 

adj = {} 
top_ten = [] 
at_least_3 = 0 

for line in file: 
    data = line.split() 
    adj[data[0]] = data[1:] 

而这正是该列表中的一个看起来像

['99995', '110038', '330533', '333808', '344852', '376948', '470766', '499315'] 
+3

你能提供创建的Python列表的一部分? – linusg

+4

你尝试过什么吗? – 2016-04-27 14:06:19

+0

保留字母作为数字和值作为计数键。 – Selcuk

回答

2
# collect the lines 
lines = [] 

with open("so.txt") as f: 
    for line in f: 
     # split each line into a list 
     lines.append(line.split()) 

# sort the lines by length, descending 
lines = sorted(lines, key=lambda x: -len(x)) 

# print the first 10 lines 
print(lines[:10]) 
+2

没有必要使用'readlines'。只要'在f:行就够了。 – Matthias

0

使用for循环和max()可能?你说你有一个for循环,将值放入临时数组中。从中你可以使用“max()”来挑选出最大的值并将其放入列表中。

作为一个开放的for循环,像追加MAX()到一个新的列表:

newlist = [] 

for x in data: 
    largest = max(x) 
    newlist.append(largest) 

或列表的理解:

newlist = [max(x) for x in data] 
从那里

然后,你必须做同样的在新列表中进行处理,直到您达到所需的前10个场景。

编辑:我刚刚意识到我误解了你的问题。你想获得最多元素的列表,而不是最高值。好。

len()对此很好。

for x in data: 
    if len(templist) > x: 
     newlist.append(templist) 

这将使你的当前最高,并从那里,你可以创建长度或临时清单自身,或两者前10名。

1

为什么不使用collections来显示前10位?即:

import re 
import collections 

file = open('numbers.txt', 'r') 
content = file.read() 
numbers = re.findall(r"\d+", content) 
counter = collections.Counter(numbers) 
print(counter.most_common(10)) 

Ideone Demo

+0

我不认为你已经理解了这个问题,它想知道文件中10个最长的列表。 – martineau

+0

嗯,我猜我没有!在你的选择中,OP希望获得记录数最多的行? –

+0

这将是我的猜测。 – martineau

0

如果与每个号码相同长度所示真的是你的数据,然后我会作出与关键=行,值=长度的字典,获得最高价值/字典中的密钥对和瞧。听起来很简单。

1

当希望计数,然后找到具有最高计数的一个(或多个),collections.Counter想到:

from collections import Counter 

lists = Counter() 
with open('node.txt', 'r') as file: 
    for line in file: 
     values = line.split() 
     lists[tuple(values)] = len(values) 

print('Length Data') 
print('====== ====') 
for values, length in lists.most_common(10): 
    print('{:2d}  {}'.format(length, list(values))) 

输出(使用示例文件数据):

Length Data 
====== ==== 
10  ['191044', '246142', '265214', '290507', '300258', '341525', '348922', '359832', '365744', '382502'] 
10  ['191044', '246142', '265214', '290507', '296858', '300258', '341525', '348922', '359832', '365744'] 
10  ['10001', '27638', '51569', '88226', '116422', '126227', '159947', '162938', '184977', '188045'] 
7  ['382502', '390538', '410857', '433453', '479170', '489980', '540746'] 
7  ['100005', '127545', '202036', '257630', '362970', '376927', '429080']