fork download
  1. import timeit
  2.  
  3. s = """
  4. import collections
  5. import itertools
  6. def JonClements(iterable):
  7. i = iter(iterable)
  8. return any(i) and not any(i)
  9.  
  10.  
  11. def only_n(l, testval=True, coerce=bool, n=1):
  12. counts = collections.Counter()
  13. def iterate_and_count():
  14. for x in itertools.imap(coerce,l):
  15. yield x
  16. if x == testval and counts[testval] > n:
  17. break
  18. counts.update(iterate_and_count())
  19. return counts[testval] == n
  20.  
  21. def only_truthy(l, n=1):
  22. counts = collections.Counter()
  23. def iterate_and_count():
  24. for x in l:
  25. if x:
  26. yield True
  27. if counts[True] > n: break
  28. else: yield False
  29.  
  30. counts.update(iterate_and_count())
  31. return counts[True] == n
  32.  
  33. def only_truthy_fixed(l, n=1):
  34. tcount = 0
  35. for x in l:
  36. if x:
  37. tcount += 1
  38. if tcount > n: return False
  39. return tcount == n
  40.  
  41. def nisanh(iterable, n=1, m=1):
  42. i = iter(iterable)
  43. return m <= sum(any(i) for x in xrange(n+1)) <= n
  44.  
  45. """
  46. def nisanh(iterable, n=1, m=1):
  47. i = iter(iterable)
  48. return list(any(i) for x in xrange(n+1))
  49. print nisanh([2,3,None])
  50. print nisanh([None,3,None])
  51.  
  52. def JonClements(iterable):
  53. i = iter(iterable)
  54. return any(i) and not any(i)
  55.  
  56. print JonClements([2,3,None])
  57. print JonClements([None,3,None])
  58.  
  59. number = 500
  60. truelist = "l=[True]*10000"
  61.  
  62. falselist = "l=[False]*10000"
  63. print timeit.timeit("only_n(l)", s+truelist, number=number)
  64. print timeit.timeit("only_n(l)", s+falselist, number=number)
  65.  
  66. print timeit.timeit("only_truthy(l)", s+truelist, number=number)
  67. print timeit.timeit("only_truthy(l)", s+falselist, number=number)
  68.  
  69. print timeit.timeit("only_truthy_fixed(l)", s+truelist, number=number)
  70. print timeit.timeit("only_truthy_fixed(l)", s+falselist, number=number)
  71.  
  72.  
  73. print timeit.timeit("JonClements(l)", s+truelist, number=number)
  74. print timeit.timeit("JonClements(l)", s+falselist, number=number)
  75.  
  76. print timeit.timeit("nisanh(l)", s+truelist, number=number)
  77. print timeit.timeit("nisanh(l)", s+falselist, number=number)
Success #stdin #stdout 6.97s 8888KB
stdin
Standard input is empty
stdout
[True, True]
[True, False]
False
True
0.005126953125
3.65571117401
0.00443387031555
2.84306001663
0.00028395652771
0.275062084198
0.000324010848999
0.046404838562
0.000968933105469
0.0430569648743