在python中如何将一个变量的长度与另一个变量的长度匹配?

在python中如何将一个变量的长度与另一个变量的长度匹配?,python,Python,我目前正在开发这段python代码,我正在尝试将用户的姓氏长度与其姓名长度相匹配 如果用户的姓氏大于其消息,则代码将成功减去用户名中多余的字符,以使两个变量相等 但是,如果用户名大于其姓氏,则代码应循环遍历用户名,并添加所需数量的字符,以使两个变量相等。我使用此函数: def pad(key, wanted_len): lk = len(key) if lk > wanted_len: return key[:wanted_len] else:

我目前正在开发这段python代码,我正在尝试将用户的姓氏长度与其姓名长度相匹配

如果用户的姓氏大于其消息,则代码将成功减去用户名中多余的字符,以使两个变量相等

但是,如果用户名大于其姓氏,则代码应循环遍历用户名,并添加所需数量的字符,以使两个变量相等。

我使用此函数:

def pad(key, wanted_len):
    lk = len(key)
    if lk > wanted_len:
        return key[:wanted_len]
    else:
        bigerkey = key * ((wanted_len / lk) + 1)
        return bigerkey[:wanted_len]
if的第一部分非常简单:如果键比预期的大,只需截断它。否则,使用键上的运算符
*
重复
n
次,其中n是预期的siwe除以键的大小

例如:

>>> print 'hello ' * 5
hello hello hello hello hello
horns的一个很好的建议简化了前面的代码:

def pad(key, wanted_len):
   return (key * ((wanted_len // len(key)) + 1))[:wanted_len]
另一种可能(更具pythonic)的方法是使用
itertools.cycle

def pad(key, len):
    it = itertools.cycle(key)
    return ''.join([it.next() for _ in xrange(len)])
键上的迭代器将在每个
next()
处按提供的iterable(此处键)的顺序弹出一个字母,并在iterable的末尾循环

from itertools import cycle
def combine(text, keyword):
    return ''.join(key for key, char in zip(cycle(keyword), text))
cylce在关键字上生成一个无限生成器。对于像‘abc’这样的关键字,它将产生a,b,c,a,b,c,a。。。。zip将在对文本进行迭代后停止

功能的逐步解释: zip(更多信息:)

循环生成无限的生成器:

keyword = '12'
# cycle(keyword) -> 1 2 1 2 1 2 .... (infinite times)
text = 'abcde'
for key, char in zip(cycle(keyword), text):
    print (key, char)
# 1 a
# 2 b
# 1 c 
# 2 d
# 1 e
#stops (cause len(text) == 5)
keys = [key for key, char in zip(cycle(keyword), text)]
#keys == [ '1', '2', '1', '2', '1']
newkeyword = ''.join(keys)
#join joins a iterable of strings with '' as delimiter between them
#newkeyword == '12121' 

这在你之前的问题中没有得到回答吗?
return(key*((通缉令//lk)+1))[:通缉令]
应该有效,你不需要if。另外,请注意,Python3Thanks中需要int除法的
/
,但您能解释一下您的解决方案吗?我不太明白。您能解释一下这个函数的具体功能吗。我对python比较陌生。
keyword = '12'
# cycle(keyword) -> 1 2 1 2 1 2 .... (infinite times)
text = 'abcde'
for key, char in zip(cycle(keyword), text):
    print (key, char)
# 1 a
# 2 b
# 1 c 
# 2 d
# 1 e
#stops (cause len(text) == 5)
keys = [key for key, char in zip(cycle(keyword), text)]
#keys == [ '1', '2', '1', '2', '1']
newkeyword = ''.join(keys)
#join joins a iterable of strings with '' as delimiter between them
#newkeyword == '12121'