让列表中的一个项目在从第一个列表中随机选择一个项目时,从另一个列表中随机选择一个项目

问题描述 投票:0回答:1

我正在尝试编写一个函数,通过从一个列表中选择名字并从另一个列表中选择姓氏来生成随机名称。我希望姓氏列表中的最后一项从名字列表中随机选择一个项目,将其与“son”连接,然后提供结果字符串。我希望每次选择该项目时都有不同的结果 - 即一次为“理查森”,下一次为“杰克逊”。

我尝试制作最后一个项目

random.choice(first_names) + 'son'
,每次都给出相同的结果。我还尝试将其设为
lambda:random.choice(first_names) + 'son'
,这给了我 lambda 函数的标识符
<function <lambda> at [0xnumbers I'm not sharing]>
。如果我在索引后使用括号,它会给出我想要的结果,但这意味着如果代码选择其他结果之一,它会引发错误。我的代码看起来有点像这样(尽管列表更长,但其他方面相同):

import random

first_names = ['James','Ida','Crocodile']
last_names = ['Smith','Williams','Ramos',lambda:random.choice(first_names) + 'son']

print(last_names[-1]())
print(last_names[-1]()) #to check if it has the same result every time
                        #this is a lot less likely in my actual code, since there's >100 names
python list random lambda
1个回答
0
投票

这是一个如我所描述的函数:

import random

first_names = ['James','Ida','Crocodile']
last_names = ['Smith','Williams','Ramos']

def get_last_name(i):
    if i >= len(last_names):
        return random.choice(first_names) + 'son'
    return last_names[i]

for i in range(4):
    print(get_last_name(i))
print(get_last_name(3))

输出:

Smith
Williams
Ramos
Idason
Jamesson
© www.soinside.com 2019 - 2024. All rights reserved.