所以我有一个包含大约400,000个列表的文本文件,大部分都是这样的。
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
到目前为止,我有一个逐行排列的for循环,并将当前行转换为临时数组列表。
如何创建包含整个文件中元素最多的列表的前十个列表。
这是我现在的代码。
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']
答案 0 :(得分: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])
答案 1 :(得分: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))
答案 2 :(得分:1)
如果想要计算并找到计数最高的那个,我会想到collections.Counter
:
public class LispListTester
{
public static void main(String[] args)
{
LispList list1 = new EmptyList();
System.out.println("[" + list1 + "]");
System.out.println("Expected: []");
LispList list2 = new NonEmptyList("A", new EmptyList());
System.out.println(list2);
System.out.println("Expected: A");
LispList list3 = new NonEmptyList("A", new NonEmptyList("B",
new NonEmptyList("C", new EmptyList())));
System.out.println(list3);
System.out.println("Expected: A B C");
LispList list4 = LispList.NIL.cons("E").cons("D").cons("C").cons("B").cons("A");
System.out.println(list4);
System.out.println("Expected: A B C D E");
}
}
输出(使用样本文件数据):
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)))
答案 3 :(得分: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个长度列表或临时列表本身,或两者。
答案 4 :(得分:0)
如果您的数据真的与每个数字长度相同,那么我会创建一个字典,其中key = line,value = length,获取字典中的顶部值/密钥对,然后瞧。听起来很容易。