queryset - python django update




在列表中查找具有等于某个值的属性(符合任何条件) (2)

因为它没有被提及只是为了完成。 好ol过滤器来过滤你的过滤元素。

函数式编程ftw。

####### Set Up #######
class X:

    def __init__(self, val):
        self.val = val

elem = 5

my_unfiltered_list = [X(1), X(2), X(3), X(4), X(5), X(5), X(6)]

####### Set Up #######

### Filter one liner ### filter(lambda x: condition(x), some_list)
my_filter_iter = filter(lambda x: x.val == elem, my_unfiltered_list)
### Returns a flippin' iterator at least in Python 3.5 and that's what I'm on

print(next(my_filter_iter).val)
print(next(my_filter_iter).val)
print(next(my_filter_iter).val)

### [1, 2, 3, 4, 5, 5, 6] Will Return: ###
# 5
# 5
# Traceback (most recent call last):
#   File "C:\Users\mousavin\workspace\Scripts\test.py", line 22, in <module>
#     print(next(my_filter_iter).value)
# StopIteration


# You can do that None stuff or whatever at this point, if you don't like exceptions.

我知道,通常在Python列表解析是首选或至少这是我读的,但我不认为这个问题是诚实的。 当然,Python不是一种FP语言,但Map / Reduce / Filter是完全可读的,是功能性编程中最标准的标准用例。

所以你去了。 了解你的功能性编程。

过滤条件列表

它不会比这更容易:

next(filter(lambda x: x.val == value,  my_unfiltered_list)) # Optionally: next(..., None) or some other default value to prevent Exceptions

我有对象列表。 我想在此列表中找到一个(第一个或其他)对象,该对象具有等于value属性(或方法结果 - 无论)。

什么是找到它的最佳方式?

这里是测试用例:

  class Test:
      def __init__(self, value):
          self.value = value

  import random

  value = 5

  test_list = [Test(random.randint(0,100)) for x in range(1000)]

  # that I would do in Pascal, I don't believe isn't anywhere near 'Pythonic'
  for x in test_list:
      if x.value == value:
          print "i found it!"
          break

我认为使用生成器和reduce()不会有什么区别,因为它仍然会遍历整个列表。

ps:等式的value只是一个例子。 当然,我们想获得满足任何条件的元素。


我遇到了类似的问题,为列表中没有任何对象符合要求的情况设计了一个小型优化(对于我的用例,这导致了性能的大幅提升):

与列表test_list一起,我还保留了一组额外的test_value_set,它由我需要过滤的列表的值组成。 所以这里agf解决方案的其他部分变得非常快。





list