Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换列表中的字符串_Python_String_List_Integer_Tuples - Fatal编程技术网

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)]
>>>