转换列表中的字符串
Transforming a string in a list
如何转换列表中的字符串 return 一个由字符串元素和字符串长度组成的列表?
就像 add_sizes([str]) -> [(str, int)]
这是我所做的:
def add_sizes(strings):
for i in strings:
return [(i, (len(i)))]
但这只适用于一个字符串,如果我有多个字符串怎么办?
使用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]
你的错误
检查第一个元素后返回,因此您将只获得第一个字符串的值。解决方法可以是
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)
或使用
中所示的列表组合
使用列表理解:
def add_sizes(slist):
out = [(s, len(s)) for s in slist]
return out
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))]
是正确的,因为 return
语句在 for
循环内,所以在第一次迭代期间它将 return.
将 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)]
>>>
如何转换列表中的字符串 return 一个由字符串元素和字符串长度组成的列表?
就像 add_sizes([str]) -> [(str, int)]
这是我所做的:
def add_sizes(strings):
for i in strings:
return [(i, (len(i)))]
但这只适用于一个字符串,如果我有多个字符串怎么办?
使用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]
你的错误
检查第一个元素后返回,因此您将只获得第一个字符串的值。解决方法可以是
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)
或使用
使用列表理解:
def add_sizes(slist):
out = [(s, len(s)) for s in slist]
return out
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))]
是正确的,因为 return
语句在 for
循环内,所以在第一次迭代期间它将 return.
将 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)]
>>>