如何在不使用任何导入的情况下将列表中的每个项目加倍?
一些例子:
>>> 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']
感谢那些帮助的人:)
答案 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)