Python:按元素符号过滤一系列列表

时间:2018-05-24 21:27:48

标签: python

我有一个看起来像这样的嵌套list

list = [[1,2,3,4],[-1,-2,-3,-4],[1,2,-3,-4]]

我正试图找到一种方法来仅保留所有值具有相同符号的列表。因此,在这种情况下,嵌套在list中的前两个列表将被保留,第三个列表将被删除。

有没有人建议如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

您可以使用集合理解来基本构建符号位(1如果为正0则为负)。如果该集合的长度为1,则所有符号都相同,如果它是2,那么它们就是混合符号。

>>> data = [[1,2,3,4],[-1,-2,-3,-4],[1,2,-3,-4]]
>>> [sub for sub in data if len({i > 0 for i in sub}) == 1]
[[1, 2, 3, 4], [-1, -2, -3, -4]]

答案 1 :(得分:2)

其他答案已经提供了单线解决方案。我个人认为那些难以阅读,因此难以调试。相反,我更喜欢在单独的一行中拼出每一步的解决方案。

话虽如此,让我们尝试一个简单的"mDataProp": function(source, type, val) { var obj = {}; obj.value = source[1]; // Set column value // Process value as desired ... obj.value_filter = obj.value + ' foobar'; // Return value for filtering if (type === 'filter') { return obj.value_filter; } // Return original value for display, sort, etc. return obj.value; } 循环。

for

答案 2 :(得分:0)

您可以使用嵌套列表推导,将每个元素与每个子列表的第一个进行比较:

list1 = [[1,2,3,4],[-1,-2,-3,-4],[1,2,-3,-4]]
new_list = [b for b in list1 if all(i < 0 if b[0] < 0 else i >= 0 for i in b)]

输出:

[[1, 2, 3, 4], [-1, -2, -3, -4]]