将列表中的每个项目加倍

时间:2013-11-22 21:54:05

标签: python list

如何在不使用任何导入的情况下将列表中的每个项目加倍?

一些例子:

>>> multiply_items(['a', 'b'])
['a', 'a', 'b', b']
>>> multiply_items(['b', 'a'])
['b', 'b', 'a', a']
>>> multiply_items(['a', 'b', 'c'])
['a', 'a', 'b', b', 'c', c']
>>> multiply_items(['3', '4'])
['3', '3', '4', 4']
>>> multiply_items(['hi', 'bye'])
['hi', 'hi', 'bye', bye']

这是我提出的,但它将元素组合在一起,而不是单独的字符串。

def multiply_items(sample_list):
    '''(list) -> list

    Given a list, returns the a new list where each element in the list is
    doubled.

    >>> multiply_items(['a', 'b'])
    ['a', 'a', 'b', b']
    >>> multiply_items(['a', 'b', 'c'])
    ['a', 'a', 'b', b', 'c', c']
    >>> multiply_items(['3', '4'])
    ['3', '3', '4', 4']

    '''
    new_list = []
    for item in sample_list:
        new_list.append(item * 2)
    return new_list

我得到的输出:

>>> multiply_items(['3', '4'])
['33', '44']
>>> multiply_items(['hi', 'bye'])
['hihi', 'byebye']

感谢那些帮助的人:)

6 个答案:

答案 0 :(得分:4)

我经常更喜欢列表理解:

def multiply_items(l):
    return [i for t in zip(l,l) for i in t]

答案 1 :(得分:2)

如果您在展示列表时查看它,其中该列表的每个元素都是重复n次的元素,那么您可以将其写为嵌套列表-comp:

data = ['a', 'b']
doubled = [item for sub in data for item in [sub] * 2]

通常需要注意的是,“相乘”项目将是同一个对象 ...所以要警惕包含可变对象的元素。

答案 2 :(得分:1)

如此接近...... 天真方法:

for item in sample_list:
    for i in range(2):
        new_list.append(item)

您的问题是由于字符串也是列表,因此'a' * 2不是['a', 'a']而是aa。现在,知道了这个问题,你仍然可以通过在单例列表中移动item来在一个循环中解决它:更好的方法:

for item in sample_list:
    new_list.extend([item] * 2)

答案 3 :(得分:0)

这是一个略显“聪明”的版本,不涉及嵌套列表理解 1

>>> a = range(5)
>>> a
[0, 1, 2, 3, 4]
>>> b = [None] * (2*len(a))  # allocate new list
>>> b
[None, None, None, None, None, None, None, None, None, None]
>>> b[::2] = a
>>> b
[0, None, 1, None, 2, None, 3, None, 4, None]
>>> b[1::2] = a
>>> b
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]

将其变成一个功能:

def multiply_list(lst):
    out = [None] * (2*len(lst))
    out[::2] = lst
    out[1::2] = lst
    return out

然后概括:

def multiply_list(lst, n=2):
    out = [None] * (n*len(lst))
    for i in range(n):
       out[i::n] = lst
    return out

1 我总是倾向于避免嵌套列表推导,因为我永远不会记住那些事情的顺序......

答案 4 :(得分:0)

multiply_items = lambda lst: [item for item in lst for i in range(2)]

答案 5 :(得分:0)

这是一种可以使用内置list函数的方法。

def multiply_list(data, times):
    multiplied = []
    for item in data:
        multiplied=multiplied+list(item)*times
    return multiplied

print multiply_list(['a', 'b'], 2)