Змея / Говнокод #7557 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
def get(a='',x=-1):
    b,c,d,e,f=a.split('\n'),[],[],0,0
    for i in range(len(b)):
        if i==0: c+=[i]; e+=len(b[i])+1; f+=len(b[i]); d+=[f]
        elif i==len(b)-1: f+=len(b[i]); d+=[f]; c+=[e]
        else: f+=len(b[i])+1; c+=[e]; d+=[f]; e+=len(b[i])+1
    for i in range(len(c)):
        if range(c[i], d[i]+1).count(x): return i

Это код чувака, который хочет получить индекс строки по индексу символа.
>>> get('a\nb', 0) # 0 - позиция символа "а"
0
>>> get('a\nb', 1) # 1 - позиция символа "\n"
0
>>> get('a\nb', 2) # 2 - позиция символа "b" (уже вторая строка)
1

Простой эквивалент кода:
GetNewlineCount = lambda s, p: s.count('\n', 0, p)

Запостил: Niceblack Niceblack, (Updated )

Комментарии (9) RSS

    • >>> get = lambda s, p: s.count('\n', 0, p)
      >>> def get1(a='',x=-1):
      	    b,c,d,e,f=a.split('\n'),[],[],0,0
      	    for i in range(len(b)):
      		if i==0: c+=[i]; e+=len(b[i])+1; f+=len(b[i]); d+=[f]
      		elif i==len(b)-1: f+=len(b[i]); d+=[f]; c+=[e]
      		else: f+=len(b[i])+1; c+=[e]; d+=[f]; e+=len(b[i])+1
      	    for i in range(len(c)):
      		if range(c[i], d[i]+1).count(x): return i
      
      >>> from timeit import timeit
      >>> timeit('get("a\\nb",1)',setup='from __main__ import get')
      6.789099662338849
      >>> timeit('get("a\\nb",1)',setup='from __main__ import get1 as get')
      0.8742503148168339
      >>>
      Ответить
      • Наоборот.

        А если взять get('a'+'\nb'*10,20), то разница будет ещё разительнее.
        Ответить
      • И на глаз ясно, что длинный вариант будет занимать больше памяти и работать медленнее. У вас возможно была загружена система при первом тесте.
        Вот тест на нетбуке:
        get("a\\nbcdefghi\\n\\nkkkk\\ns,,,s,,,s\ \ntrollollo\\n12334566",20) # 3.4331777255
        get1("a\\nbcdefghi\\n\\nkkkk\\ns,,,s,,,s \\ntrollollo\\n12334566",20) # 85.8690221341
        Ответить
        • кстати да.
          >>> timeit('get("a\\nb",1)',setup='from __main__ import get')
          0.6096830368041992
          >>> timeit('get("a\\nb",1)',setup='from __main__ import get1 as get')
          5.789045095443726

          лямбда то быстрее.
          Ответить
  • х)T.U?Z(A?H K(Q.G?B!N:V.A T,Y:C)A$M,S"A)U.G?X$G$TA!I,D?N,E$G:L(D.C$XJ!C)P(Y!KL O.T!S.D!Q S)B,E$W!ZA?G!D?D:D)L?Y.Y)W$O"X?J"N,B,O(S?A:E.D:G,U.K?B W.P:T)G"N:M$K.M"P.T.R"V?Y V,T:X.S!F$M.T,R$L!O!H$V$ZB B,Z,V,U)XQ.Y(S.U?R(V(L?X.R)L(URW:V:R!Z V)J(J?L"T,J,T.I.U(I!K(R:B$R$U P"L(Z(I,D!D:R$X"U?O(M,K:L)Q J)WOY"V$X?F(F$G$J I!E)O(V$T"Y?N)P(LX K?A!P:P,FY"OFB!D,S!I.K?H)Z"J$Q?K:T?J?X.K"X.H!X(Z:X,C:R.T F.A$EM(A K)PH(E,MK.C:T!VK!O L.H:O:M!L,O"L)Q,DN!E:R?P?MJ(T!KZ H"PZ?G,Q$B)AA?X$Z P)D"Q,T(SO!E I.SL$Z?Z,K W"I(N,D"X$C!N"U!M"UQ$H Q Y,E?T(S X$T,S!D)T.C$M)UE(I(MP"A(L.G:R,V"O.V?J.V.F,E A(Z$VOM)Z:F$S R!K,N"I)K?N?B"G(A)HH"Z"PR!R(X:C,W R"U$H"Q?O(A.R!J$L,Y Q!J,J"B:H?OI V?CM$Y"K.V!U:P L$F?Y?H(V(P,Z,Q$A B"D!I:B)O"B?YW"W"FV"I,PL"Y N"K:H?UR,S?T$M.E:GT"H)L$K)J,K(O,P"S,H,Y(M S?K!XRS W"I(K"J:R.D,H,Q"OD.T?I:M:P$C?D:G Q D$UF(J:H(F:S)YXR"L$M)U(R:B"O!U D?I!Z B(W:K,UW X:J.L!B:P.W.F!I:L:X"E?E)L!Y.H(A$T(D.EF)F?W,KПZRFZMULRKWKBDBMJDWLKXJWGEKOCEIPAQSRFOXSUTSSCTQFLPYCCITVYCOYLCVOBXEHMCBSEBFWOZYAHSWUPISEOWIUPGUDRFLGIUIZQXGHQUSLMNYJJRZOIOUCIPBVQFZKJBYMVPEDXHSTQDICQKDWWTJOWTQKBBRFRTFOIYJWRWJTNMLRPTBXMLKQQAPYJUUTFXVRAXNSOHUABHTZGVHSRRQJTPTVZDAXNSDYCIGBWHUVSHIXEUGHNMHLVXVL
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8