输入
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语句,但不太确定如何执行此操作。
答案 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
在扩展形式中,我们可以更清楚地看到它的步骤。
new_list
以将字符串和长度放入。strlist
中的每个字符串。new_list
。new_list
。当然,这两个都可以为您提供所需的输出:
[('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]