Python 转换列表中的字符串
如何转换列表中的字符串并返回由字符串元素和字符串长度组成的列表? 就像Python 转换列表中的字符串,python,string,list,integer,tuples,Python,String,List,Integer,Tuples,如何转换列表中的字符串并返回由字符串元素和字符串长度组成的列表? 就像添加大小([str])->[(str,int)] 以下是我所做的: def add_sizes(strings): for i in strings: return [(i, (len(i)))] 但这只适用于一个字符串,如果我有多个字符串,该怎么办?使用list\u comprehension >>> l = ['foo', 'bar', 'j', 'mn'] >>&g
添加大小([str])->[(str,int)]
以下是我所做的:
def add_sizes(strings):
for i in strings:
return [(i, (len(i)))]
但这只适用于一个字符串,如果我有多个字符串,该怎么办?使用
list\u 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
更好的方法
更好的使用方法
您可以将函数定义为
def add_sizes(l):
return map(lambda x:(x,len(x)),l)
或者使用列表comp,如使用列表理解:
def add_sizes(slist):
out = [(s, len(s)) for s in slist]
return out
我将使用和:
如果您将有一个列表和单个字符串的混合体,您需要捕获:
def add_sizes(strings):
return zip(strings, map(len, strings)) if not isinstance(strings, str) else [(strings, len(strings))]
是正确的,因为
return
语句在for
循环中,所以在第一次迭代期间它将返回
将return
语句移到for
循环之外,并创建新的列表,以添加(追加)每个元素及其长度作为元组
演示:
您能添加一些示例和您尝试过的代码吗?问题不清楚?给出一些适当的例子。@icefish:remove
return
语句位于for循环外部。检查答案最好添加指向文档的链接,你将需要捕捉传递的元素只是字符串而不是字符串列表的情况,add_size(“foo”)->[('f',1),('o',1),('o',1)]
但是Paddy,OP明确提到这是字符串列表,所以他很可能不需要检查:)是的,我认为OP想要一种可以处理单个字符串或字符串列表的方法。
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))]
>>> 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)]
>>>