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

时间:2015-03-14 12:08:46

标签: python

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

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

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

2 个答案:

答案 0 :(得分:0)

我使用这个功能:

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的第一部分非常简单:如果密钥大于预期,只需截断它即可。 Otherwize,使用键上的运算符*重复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()提供的可迭代(此处为key)的顺序弹出一个字母,并在可用的结尾循环。

答案 1 :(得分:0)

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(更多信息:https://docs.python.org/2/library/functions.html#zip

for a, b in zip( [1, 2, 3], ['a', 'b']):
    print (a, b)
#1 a
#2 b
# stops after 2 steps, because ['a', 'b'] has only two elements

循环使得无限生成器:

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'