如何从这两个文件中找到前100个名字?

2024-06-28 11:09:00 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我现在拥有的

def BabyNames():
RFile = open("boys.dat.txt","r")
OFile = open("girls.dat.txt","r")

babyNameLst = []
result=[]



for line in RFile:
    line = line.strip()
    name,count= line.split(",")
    name= name.strip()
    New = (count,name)
    babyNameLst.append(New)
for line in OFile:
    line= line.strip()
    name,count = line.split(",")
    name=name.strip()
    New = (count,name)
    babyNameLst.append(New)

sorted_Nums = sorted(babyNameLst, reverse= True)

print(sorted_Nums[:100])

示例男孩.dat.txt

Jacob  ,204760
Michael ,187948
Joshua ,173395
Matthew ,168437
Andrew ,151667
Christopher ,148897
Daniel ,145989
Joseph ,144904
Ethan ,140215
Nicholas ,139296
William ,138425
Anthony ,136813
David ,129579
Ryan ,129284
Tyler ,126685

示例女孩.dat.txt

Emily  ,170901
Madison ,142410
Emma ,125605
Hannah ,124651
Abigail ,105519
Olivia ,104454
Ashley ,103995
Samantha ,101188
Alexis ,100782
Sarah ,96907
Elizabeth ,96682
Isabella ,88941
Alyssa ,85267
Grace ,83188
Lauren ,77841
Taylor ,76907
Jessica ,76093
Brianna ,74945
Kayla ,73756

这些是名字和使用次数。我需要用计数找出这些男孩和女孩名字的前100名。我该怎么做?计数告诉我名字被选中的次数,需要最多前100名的名字计数。你知道吗

顺序如下: 204740雅各布 187948迈克尔 173395约书亚 170901艾米莉 168437安德鲁 等。。。你知道吗


Tags: nametxtnewforcountlineopen名字
3条回答

我希望女孩的名单和男孩的名单是分开排序的(如我所见)

所以您需要的是从两个列表中获得排序后的数组。你知道吗

你要找的是非常相似的合并排序合并算法。你知道吗



假设两个数组都是按升序排序的,我们希望得到的数组保持相同的顺序。将两个数组A[0..m-1]和B[0..n-1]合并为数组C[0..m+n-1]的算法如下:

  1. 相应地,引入读取索引i、j来遍历数组A和B。 引入写索引k来存储第一个空闲单元的位置 结果数组。默认情况下,i=j=k=0。你知道吗
  2. 在每一步:如果两者都 索引在范围内(i<;m和j<;n),请选择(A[i]的最小值, B[j]),并将其写入C[k]。否则转至步骤4。你知道吗
  3. 增加数组的k和索引,算法定位在最小值处,增加1。 重复步骤2。你知道吗
  4. 从数组中复制rest值,该索引是 仍然在范围内,到结果数组。你知道吗

algorithm merge(A, B) is
inputs A, B : list
returns list

C := new empty list
while A is not empty and B is not empty do
    if head(A) ≤ head(B) then
        append head(A) to C
        drop the head of A
    else
        append head(B) to C
        drop the head of B

// By now, either A or B is empty. It remains to empty the other input list.
while A is not empty do
    append head(A) to C
    drop the head of A
while B is not empty do
    append head(B) to C
    drop the head of B

return C

这是合并算法的伪代码。希望有道理。干杯!!!你知道吗

把你的名字改成

sorted(babyNameLst, key=lambda tup: int(tup[0]), reverse=True)

还有一点注意:根据pep8对于变量名下划线只能用:baby\u name\u list。Camlecase是允许上课的

使用pandas.read_csv()可以很容易地做到这一点,即

import pandas as pd
boys = pd.read_csv("boys.txt", names=['names','births'])
print(boys)

          Jacob   204760
0       Michael   187948
1        Joshua   173395
2       Matthew   168437
3        Andrew   151667
4   Christopher   148897
5        Daniel   145989
6        Joseph   144904
7         Ethan   140215
8      Nicholas   139296
9       William   138425
10      Anthony   136813
11        David   129579
12         Ryan   129284
13        Tyler   126685

如果需要打印前5名,可以使用:

print(boys.head(5))

      names  births
0    Jacob   204760
1  Michael   187948
2   Joshua   173395
3  Matthew   168437
4   Andrew   151667

I need both boys and girls together in one list

^{}两个数据帧,即:

b = pd.read_csv("boys.txt", names=['names','births'])
g = pd.read_csv("girls.txt", names=['names','births'])
x = pd.concat([b, g]).reset_index(drop=True)
print(x)

           names  births
0         Jacob   204760
1       Michael   187948
2        Joshua   173395
3       Matthew   168437
4        Andrew   151667
5   Christopher   148897
6        Daniel   145989
7        Joseph   144904
8         Ethan   140215
9      Nicholas   139296
10      William   138425
11      Anthony   136813
12        David   129579
13         Ryan   129284
14        Tyler   126685
15       Emily    170901
...

相关问题 更多 >