如何转换列表中的字符串返回一个包含字符串元素和字符串长度的列表?
就像add_sizes([str]) -> [(str, int)]
这是我做的:
def add_sizes(strings):
for i in strings:
return [(i, (len(i)))]
但这仅适用于一个字符串,如果我有多个字符串,该怎么办?
答案 0 :(得分:4)
使用list_comprehension
>>> l = ['foo', 'bar', 'j', 'mn']
>>> [(i,len(i)) for i in l]
[('foo', 3), ('bar', 3), ('j', 1), ('mn', 2)]
将其定义为单独的函数。
def add_sizes(l):
return [(i,len(i)) for i in l]
答案 1 :(得分:2)
检查第一个元素后,您将返回,因此您将只获得第一个字符串的值。解决方法可以是
def add_sizes(strings):
temp = []
for i in strings:
temp.append((i, (len(i))))
return temp
使用map
>>> l = ['abc','defg','hijkl']
>>> map(lambda x:(x,len(x)),l)
[('abc', 3), ('defg', 4), ('hijkl', 5)]
您可以将您的功能定义为
def add_sizes(l):
return map(lambda x:(x,len(x)),l)
中显示的列表组合
答案 2 :(得分:1)
def add_sizes(strings):
return list(zip(strings, map(len, strings)))
print(add_sizes(["foo","bar","foobar"]))
[('foo', 3), ('bar', 3), ('foobar', 6)]
如果你有混合的列表和单个字符串,你需要抓住它:
def add_sizes(strings):
return zip(strings, map(len, strings)) if not isinstance(strings, str) else [(strings, len(strings))]
答案 3 :(得分:0)
使用列表理解:
def add_sizes(slist):
out = [(s, len(s)) for s in slist]
return out
答案 4 :(得分:0)
是的,因为return
语句在for
循环内,所以在第一次迭代时它会返回。
在return
循环之外移动for
语句并创建新列表以添加(追加)每个元素及其长度作为元组。
演示:
>>> def add_sizes(input_list):
... result = []
... for i in input_list:
... result.append((i, len(i)), )
... return result
...
>>> l1 = ["asb", "werg", "a"]
>>> add_sizes(l1)
[('asb', 3), ('werg', 4), ('a', 1)]
>>>