2

标题可能看起来有点奇怪,但这是我需要在 Python 中做的事情:

假设我有一个列表 (L) 和一个布尔数组 (A)

L=[1,2,3,4] 
A=[True, False, True]

我需要创建一个包含 L 的列表,其中 A 为真和假,其中 A 为假,即

[[1,2,3,4], False, [1,2,3,4]]

我正在考虑做类似的事情,
L and A
但它似乎不起作用,因为 L 不是我想要的标量。

有没有办法将 L 定义为标量并用一两行代码完成它?

谢谢。

4

4 回答 4

4

您可以使用列表推导:

[L if i else False for i in A ]
于 2013-03-08T06:08:50.840 回答
2

这是一个非常简单的方法:

newList = []
for x in A:
   if x is True:
       newList.append(L)
   else: 
       newList.append(False)

但既然你想要简洁,这里有一个单行:

[L if x else x for x in A]
于 2013-03-08T06:07:20.900 回答
1
map(lambda x: L if x else False, A)
于 2013-03-08T06:10:03.997 回答
0

根据定义,L并且A不是标量。您可以使用一个标量,它遍历 A 并返回一个向量,其中包含L标量所在的位置TrueFalse它所在的位置False

使用列表理解:

[L if a else False for a in A]    # a is the scalar here.

使用map(...)

map(lambda a: L if a else False, A)

使用for语句:

returnVector = A[:]    # returnVector is the intended output vector
for index, a in enumerate(A): if a is True: returnVector[index] = L
于 2013-03-08T07:49:51.217 回答