为列表中的每个字符串附加字符串长度

时间:2016-03-28 03:12:59

标签: python

输入

strlist = ['test', 'string']

期望的输出:

strlist = [('test', 4), ('string', 6)] 

尝试1:

def add_len(strlist):
    for i, c in enumerate(strlist):
        strlist += str(len(strlist))
    return strlist

尝试2:

def add_len(strlist):
    for c in strlist:
        c += " " + str(len(c))
    return strlist

我意识到我有以下问题:

  • 尝试1:这会导致无限循环,因为代码会不断添加到列表中。

  • 尝试2:这不会将值添加到字符串中,但是,当我这样做时,我会从#1中获得无限循环问题。

我认为我需要首先评估列表中的元素数量并实现while语句,但不太确定如何执行此操作。

4 个答案:

答案 0 :(得分:6)

使用列表理解:

strlist = ['test', 'string']

def add_len(strlist):
    return [(s, len(s)) for s in strlist]

答案 1 :(得分:2)

你可以使用这样的列表理解。

def add_len(strlist):
    return [(s, len(s)) for s in strlist]

或者扩展,

def add_len(strlist):
    new_list = []
    for s in strlist:
        new_list.append((s, len(s)))
    return new_list

在扩展形式中,我们可以更清楚地看到它的步骤。

  1. 创建列表new_list以将字符串和长度放入。
  2. 迭代strlist中的每个字符串。
  3. 对于每个字符串,将字符串及其长度附加到new_list
  4. 返回new_list
  5. 当然,这两个都可以为您提供所需的输出:

    [('test', 4), ('string', 6)]
    

答案 2 :(得分:0)

使用map()

>>> strlist
['test', 'string']

>>> list(map(lambda x: (x, len(x)), strlist))
[('test', 4), ('string', 6)]

答案 3 :(得分:0)

for i, c in enumerate(strlist)

i是字符串列表中元素的索引,c是元素的值。并且您会继续将结果附加到位(strlist),以便strlist不断增长。

虽然第二次尝试不会输出您想要的结果。结果将是strlist = ['test 4', 'string 6']。每个元素都不是由tuple组成的。

同时,两次尝试都会修改strlist,这会带来潜在问题(影响引用strlist的其他属性/参数)。

更好的解决方案是使用列表理解。

strlist = ['test', 'string']
new_strlist = [(s, len(s)) for s in strlist]