转换列表中的字符串

时间:2015-03-29 13:24:58

标签: python string list integer tuples

如何转换列表中的字符串返回一个包含字符串元素和字符串长度的列表? 就像add_sizes([str]) -> [(str, int)]

一样

这是我做的:

def add_sizes(strings):
    for i in strings:
        return [(i, (len(i)))]

但这仅适用于一个字符串,如果我有多个字符串,该怎么办?

5 个答案:

答案 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)

或使用Avinash's answer

中显示的列表组合

答案 2 :(得分:1)

我会使用mapzip

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