转换列表中的字符串

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

我会使用 map and zip:

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