Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-列表和排序_Python - Fatal编程技术网

Python-列表和排序

Python-列表和排序,python,Python,这是我的密码: def dictionary(): ''' pulls the usernames and passwords from testdata.txt ''' global passwords, usernames usernames = [] passwords = [] file_open = open('testdata.txt', 'r') for accounts in file_open: userna

这是我的密码:

def dictionary():
    ''' pulls the usernames and passwords from testdata.txt '''
    global passwords, usernames
    usernames = []
    passwords = []

    file_open = open('testdata.txt', 'r')

    for accounts in file_open:

        username, password = accounts.split('\t')
        password = password.strip('\n')

        usernames.append(username)
        passwords.append(password)

def output():
    ''' outputs the header for the list and computes a portion of the equations to output '''
    password_data_list = []
    password_frequency_total = 0
    amount = 0

    for password in passwords:
        password_frequency_total = password_frequency_total + 1

    print('{:<10}{:>17}{:>13}'.format('Password', 'Frequency', '%'))
    print('=' * 40)

    for password in passwords:
        password_frequency = passwords.count(password)
        password_frequency_percentage = ((password_frequency / password_frequency_total) * 100)
        password_data = '{:<10}{:>17}{:>12.4f}%'.format(password, password_frequency, password_frequency_percentage)
        password_data_list.append(password_data)

    for x in password_data_list:
        print(x)
def字典():
''从testdata.txt提取用户名和密码''
全局密码、用户名
用户名=[]
密码=[]
文件_open=open('testdata.txt','r')
对于打开的文件中的帐户:
用户名,密码=accounts.split('\t')
password=password.strip('\n')
usernames.append(用户名)
密码。追加(密码)
def输出():
''输出列表的标题,并计算要输出的部分方程式''
密码\数据\列表=[]
密码\频率\总数=0
金额=0
密码中的密码:
密码\频率\总数=密码\频率\总数+1
打印('{:17}{:>13}'。格式('Password','Frequency','%'))
打印('='*40)
密码中的密码:
密码\频率=密码。计数(密码)
密码频率百分比=((密码频率/密码频率总数)*100)
password_data='{:17}{:>12.4f}%'。格式(密码、密码频率、密码频率百分比)
密码\u数据\u列表。追加(密码\u数据)
对于密码\u数据\u列表中的x:
打印(x)

问:如何将频率从最大值到最小值排序?

首先:始终使用
with
语句来处理文件。这将确保在您使用conext退出
时正确关闭文件,例如:

with open(filename, 'r') as file:
    for foo in file:
        # do whatever

对于您的问题:您可以在数组中使用
sort()
方法对它们进行排序。在您的情况下,您可以执行
password\u data\u list.sort()
并完成。

您可以使用
collections.Counter
有效地计算每个密码的频率,作为密码到计数映射的dict,您可以使用它作为密钥对密码进行排序。使用循环计数
密码\u频率\u总数
是不必要的,因为您只需使用
密码
列表的长度:

from collections import Counter
password_frequency = Counter(passwords)

print('{:<10}{:>17}{:>13}'.format('Password', 'Frequency', '%'))
print('=' * 40)

for password in sorted(passwords, key=password_frequency.get):
    password_frequency_percentage = ((password_frequency[password] / len(passwords)) * 100)
    password_data = '{:<10}{:>17}{:>12.4f}%'.format(password, password_frequency, password_frequency_percentage)
    password_data_list.append(password_data)
从集合导入计数器
密码\频率=计数器(密码)
打印('{:17}{:>13}'。格式('Password','Frequency','%'))
打印('='*40)
对于排序中的密码(密码,key=password\u frequency.get):
密码频率百分比=((密码频率[密码]/len(密码))*100)
password_data='{:17}{:>12.4f}%'。格式(密码、密码频率、密码频率百分比)
密码\u数据\u列表。追加(密码\u数据)

旁白:这些统计数据是否准确,存在相同百分比值的重复条目。我正在尝试从最大值到最小值获取频率,您建议我将sort()放在何处以接收该输出?就在密码数据列表中x的
前面的一行:…
在您的
输出功能中。