在Python中编写这个“双管列表”的更好方法

我的意思是第12行的for循环和嵌套在其中的for循环.我不止一次遇到这种情况.我会使用列表理解,但似乎它不会在这里工作.

import random

import string

def password_generator():
    key = zip(string.digits, string.ascii_uppercase)

    cruft, x = str(random.random()).split('.')

    pw = ''

    for item in x:
        for element in key:
            if item in element:
                Q = random.random()
                if Q > 0.7:
                    pw += element[1].lower()
                else:
                    pw += element[1]

    print pw

谢谢.

最佳答案 这是一种使用列表理解的方法:

def pw_gen():
    key = zip(string.digits, string.ascii_uppercase)

    cruft, x = str(random.random()).split('.')

    def f(i,e):
      Q = random.random()
      if Q > 0.7:
        return e[1].lower()
      else:
        return e[1]

    return [ f(item,element) for item in x for element in key if item in element ]

这将返回一个字符列表.使用“”.join(pw_gen())转换为字符串.

点赞