将[[1,2],[3,4]]转换为[[1,2,1,2],[3,4,4,4]]而不循环

时间:2014-02-18 22:09:06

标签: python list python-2.7

a = [1, 2]
print a * 2 

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

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

我可以在不循环的情况下将b转换为[[1, 2, 1, 2], [3, 4, 3, 4]]吗?

5 个答案:

答案 0 :(得分:8)

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

zip(*zip(*b)*2)

返回

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

答案 1 :(得分:4)

列表推导是否算作循环?

>>> [x*2 for x in b]
[[1, 2, 1, 2], [3, 4, 3, 4]]

答案 2 :(得分:3)

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

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

输入:

a = [[1,2],[3,4],[5,6]]

呼叫:

expand(a,2)

输出:

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

答案 3 :(得分:0)

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

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]

对于任意数量的列表和“隐藏”迭代(您使用map函数而不是使用显式for循环进行迭代),请尝试以下操作:

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

答案 4 :(得分:0)

您可以使用map

>>> b = [[1, 2], [3, 4]]
>>> list(map(lambda l: l*2, b))
[[1, 2, 1, 2], [3, 4, 3, 4]]