我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.
我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.
码
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)
错误信息
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud) 在Python中,是否有一种交错两个相同长度列表的好方法?
说我给[1,2,3]和[10,20,30].我想把它们变成[1,10,2,20,3,30].
假设我有一个像这样的Python列表:
letters = ['a','b','c','d','e','f','g','h','i','j']
Run Code Online (Sandbox Code Playgroud)
我想在每个第n个元素后插入一个'x',假设该列表中有三个字符.结果应该是:
letters = ['a','b','c','x','d','e','f','x','g','h','i','x','j']
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过循环和插入来做到这一点.我实际上寻找的是一种Python方式,也许是一个单行程?
我有两个迭代器,一个list和一个itertools.count对象(即无限值生成器).我想将这两个合并到一个生成的迭代器中,它将在两者之间交替屈服值:
>>> import itertools
>>> c = itertools.count(1)
>>> items = ['foo', 'bar']
>>> merged = imerge(items, c) # the mythical "imerge"
>>> merged.next()
'foo'
>>> merged.next()
1
>>> merged.next()
'bar'
>>> merged.next()
2
>>> merged.next()
Traceback (most recent call last):
...
StopIteration
Run Code Online (Sandbox Code Playgroud)
这样做最简单,最简洁的方法是什么?
可能重复:
python:使用元素散布列表的最优雅方式
假设我有以下列表:
['a','b','c','d','e']
Run Code Online (Sandbox Code Playgroud)
如何-在此列表中的每个项目之间添加新项目(在本例中为a ),以便我的列表如下所示?
['a','-','b','-','c','-','d','-','e']
Run Code Online (Sandbox Code Playgroud)
谢谢.
执行以下操作的pythonic方法是什么:
我有两个列表a和b相同的长度n,我想形成列表
c = [a[0], b[0], a[1], b[1], ..., a[n-1], b[n-1]]
Run Code Online (Sandbox Code Playgroud) 我想在python中合并两个列表,列表具有不同的长度,因此较短列表的元素在最终列表中的间隔尽可能相等.即我想采取[1, 2, 3, 4]并['a','b']合并它们以获得类似的列表[1, 'a', 2, 3, 'b', 4].它需要能够与那些不准确的倍数太名单功能,所以它可以采取[1, 2, 3, 4, 5]与['a', 'b', 'c']生产[1, 'a', 2, 'b', 3, 'c', 4, 5]或相似.它需要保留两个列表的顺序.
我可以通过一个冗长的蛮力方法看到如何做到这一点但是因为Python似乎有很多优秀的工具可以做各种我不知道的聪明的事情(还)我想知道是否还有其他的东西优雅我可以使用?
注意:我使用的是Python 3.3.
在Python中替换从不同迭代器获取值的最有效方法是什么,例如,alternate(xrange(1, 7, 2), xrange(2, 8, 2))它将产生1,2,3,4,5,6.我知道实现它的一种方法是:
def alternate(*iters):
while True:
for i in iters:
try:
yield i.next()
except StopIteration:
pass
Run Code Online (Sandbox Code Playgroud)
但是有更高效或更清洁的方式吗?(或者,更好的是,itertools我错过了一个功能?)
我有两个长度为n和n + 1的列表:
[a_1, a_2, ..., a_n]
[b_1, b_2, ..., b_(n+1)]
Run Code Online (Sandbox Code Playgroud)
我想要一个函数给出一个列表,其中包含来自两者的备用元素,即
[b_1, a_1, ..., b_n, a_n, b_(n+1)]
Run Code Online (Sandbox Code Playgroud)
以下工作,但看起来不聪明:
def list_mixing(list_long,list_short):
list_res = []
for i in range(len(list_short)):
list_res.extend([list_long[i], list_short[i]])
list_res.append(list_long[-1])
return list_res
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议更多的pythonic方式吗?谢谢!
我是Python的新手,我仍然很难将语言本身用于我的程序.这是我到目前为止所拥有的:
# Purpose: 'twolists' = takes 2 lists, & returns a new list containing
# alternating elements of lists.
# Return = final_list
# Parameter = list1, list2
def twolists(list1, list2): # don't forget to return final_list
alt_list = []
a1 = len(list1)
a2 = len(list2)
for i in range(# ? ):
# append one thing from list1 to alt_list - How?
# append one thing from list2 to alt_list - How?
Run Code Online (Sandbox Code Playgroud)
现在该程序应该产生如下输出:
outcome = twolists([ ], ['w', 'x', 'y', …Run Code Online (Sandbox Code Playgroud)