在不循环的情况下翻转列表中的条目

2024-04-25 23:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,我有一个0和1的列表(可能很长),例如

L = [0,1,0,1,1,0,1,0,0,1]

我想在不使用循环的情况下翻转列表中的每个条目,例如,使0变为1,使1变为0。在

我的想法是:这个L可以看作是实数的二进制表示。所以我想把L变成0101101001,然后我想有一些位操作可以直接做翻转工作。最后,我需要将翻转后的术语返回到list,即1010010110到{}

有没有一种方法可以在Python中实现这个想法(不使用numpy)?这种方法会比循环快得多吗?这种方法是实现这个目标的最快方法吗?在

这是一个面试问题。我无法现场回答。我不允许使用numpy这样的库。在


Tags: 方法numpy目标列表二进制情况条目现场
3条回答

将列表转换为字符串,使用str.translate进行替换,然后将其转换回列表。在

import string
d = [0,1,0,1,1,0,1,0,0,1]
e = ''.join(map(str,d))
table = string.maketrans('01','10')
f = e.translate(table)
g = map(int,f)

^{pr2}$

您也可以使用递归来迭代,而不需要循环

def foo(seq, result = None):
    if result is None:
        result = list()
    if not seq:
        return result
    result.append(1 if seq[0] == 0 else 0)
    return foo(seq[1:], result)

>>> print(foo(d))
[1, 0, 1, 0, 0, 1, 0, 1, 1, 0]
>>>

可以使用lambda和map来实现:

l = [0,1,0,1]
f = map(lambda x: int(not x),l)
print f # prints [1,0,1,0]

您可以使用列表理解和位异或运算符(^)来实现这一点:

def flip(L):
    return [ x ^ 1 for x in L ]

L = [0,1,0,1,1,0,1,0,0,1]
print flip(L)

相关问题 更多 >