Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不循环地将[[1,2]、[3,4]]转换为[[1,2,1,2]、[3,4,3,4]]_Python_List_Python 2.7 - Fatal编程技术网

Python 不循环地将[[1,2]、[3,4]]转换为[[1,2,1,2]、[3,4,3,4]]

Python 不循环地将[[1,2]、[3,4]]转换为[[1,2,1,2]、[3,4,3,4]],python,list,python-2.7,Python,List,Python 2.7,产生[1,2,1,2]。现在 a = [1, 2] print a * 2 我可以不循环地将b转换为[[1,2,1,2],[3,4,3,4]吗?列表理解是否算作循环 b = [[1, 2], [3, 4]] 正如其他人所说,如果您想解决任意数量列表的问题,那么无论发生什么情况,迭代都会发生。如果您的列表只有2个成员,则以下解决方案无需迭代即可工作: >>> [x*2 for x in b] [[1, 2, 1, 2], [3, 4, 3, 4]] 对于任意数量的列表和“

产生
[1,2,1,2]
。现在

a = [1, 2]
print a * 2 

我可以不循环地将
b
转换为
[[1,2,1,2],[3,4,3,4]
吗?

列表理解是否算作循环

b = [[1, 2], [3, 4]]

正如其他人所说,如果您想解决任意数量列表的问题,那么无论发生什么情况,迭代都会发生。如果您的列表只有2个成员,则以下解决方案无需迭代即可工作:

>>> [x*2 for x in b]
[[1, 2, 1, 2], [3, 4, 3, 4]]
对于任意数量的列表和“隐藏”迭代(使用
map
函数而不是显式
For
循环进行迭代),请尝试以下操作:

b = [[1, 2], [3, 4]]
# Uses iterable unpacking, which may be considered iteration
l1, l2 = b
# If you don't want iterable unpacking, use that instead:
# l1 = b[0]; l2 = b[1]
print [l1 * 2, l2 * 2]

如果不能使用循环,请随意使用递归:

b = [[1, 2], [3, 4]]
print map(lambda x: x * 2, b)
输入:

def expand(mylist,n):
    if len(mylist)==1:
        return [mylist[0]*n]
    else:
        return [mylist[0]*n] + expand(mylist[1:],n)
电话:

输出:

expand(a,2)

如果您不介意元组列表,您可以尝试一些
zip
sheanigans:

[[1, 2, 1, 2], [3, 4, 3, 4], [5, 6, 5, 6]]
返回

zip(*zip(*b)*2)

您可以使用
map

[(1, 2, 1, 2), (3, 4, 3, 4)]

为什么没有循环?有了循环,它就这么简单:
b=[x*2代表a中的x]
@Bill,除非有人解释为什么不允许循环,否则它是毫无用处的handicap@mhlester,SchighSchagh。我认为OP显然意味着没有明确的循环;OP发现了
[1,2]*2
的酷行为,并想知道它的极限。如果问题被修改为“出于好奇,我能……不显式循环吗?”?如果OP这么说,那就好了。但正如目前所写,上面写着“我不知道如何循环,我很害怕。我还没有准备好学习它,所以不要教我正确的方法。”@Bill我完全同意mhlester的观点。编辑:另外,我不清楚OP是否仅仅意味着没有显式循环,因为我在这里看到一些问题,海报似乎认为通过隐藏循环,代码将神奇地运行在O(1)或其他地方。可能是这样,但我没有理由不使用循环。@mhlester,这是可怕的味道,但OP没有要求迭代。当然,我也会在现实世界中使用列表理解或
for
循环;)那真是一个大杂烩+1这与列表理解相同,只是可读性差得多。这有点苛刻。OP说“没有循环”和可读性是旁观者的眼中钉。好吧,现在我太害怕发布
list(map(list,map(chain.from_iterable,map(partial(repeat,times=2),b))
,即使这很有趣,如果人们会对可以证明满足(坦率地说是愚蠢的)要求的答案投反对票。[+1.]@DSM,如果只是为了热闹的局面,我会完全赞成的
[(1, 2, 1, 2), (3, 4, 3, 4)]
>>> b = [[1, 2], [3, 4]]
>>> list(map(lambda l: l*2, b))
[[1, 2, 1, 2], [3, 4, 3, 4]]