колькасці элементаў у спісе

Праблема складаецца ў тым, каб лічыць элементы ў спісе без выкарыстання LEN (спіс).

Мой код:

def countFruits(crops):
  count = 0
  for fruit in crops:
    count = count + fruit
  return count

Памылка: «INT» і «вул»

Яны павінны быць тэставымі прыкладамі, якія павінны запусціць праграму.

crops = ['apple', 'apple', 'orange', 'strawberry', 'banana','strawberry', 'apple']
count = countFruits(crops)
print count
7
1
У першы раз праз ваш цыкл, вы просіце Python, каб дадаць 0 і «яблык» . Python не ведае, як гэта зрабіць, так што ён выдае памылку. Вы можаце зрабіць гэта так, вы толькі дадаць лічбы разам?
дададзена аўтар Sam Mussmann, крыніца
Я думаю, што ёсць тонкая праблема, калі вы на самой справе <�б> лічачы збожжавыя культуры супраць вызначэння памеру спісу
дададзена аўтар Ryan Haining, крыніца
@gnibbler Справа ў тым, каб <�я> не выкарыстоўваць Len() , так што выкарыстанне __ Len __ замест <�я> мог </я> быць дазволена альтэрнатывай.
дададзена аўтар poke, крыніца
<�Код> падлік = кол + 1 ці проста разлічваць + = 1
дададзена аўтар root, крыніца
<�Код> Count = Len культур .__ __() ?. (Калі вы не думаеце, што гэта падман: D)
дададзена аўтар kampu, крыніца

6 адказы

Паспрабуйце гэта:

def countFruits(crops):
  count = 0
  for fruit in crops:
    count = count + 1
  return count

Для таго, каб вылічыць даўжыню спісу вы проста павінны дадаць 1 для лічыльніка для кожнага знойдзенага элемента, не звяртаючы ўвагі на садавіна . Акрамя таго, вы можаце напісаць радок з даданнем, як гэта:

count += 1

І таму, што мы на самай справе не выкарыстоўваць садавіна , мы можам запісаць для , як гэта:

for _ in crops:

Стварэнне абедзвюх мадыфікацый, вось канчатковы варыянт рэалізацыі:

def countFruits(crops):
    count = 0
    for _ in crops:
        count += 1
    return count
1
дададзена
def count(x):
    return sum(1 for _ in x)

Вышэй, з'яўляецца даволі эфектыўным; ўсведамленне не пашырана ў памяць, перш чым прымаць суму, але назапашваецца для кожнага элемента, генераванага. Гэта значыць: сума ([1 для _ у х]) было б значна горш.

Не магу зразумець, чаму вы не хочаце выкарыстоўваць LEN() ... Адзіная прычына, я магу сабе ўявіць, калі итератор з'яўляецца генератарам, і вы не жадаеце ёсць элементы, у гэты выпадак проста дадайце лічыльнік цыклу (праз пералік робіць яго чыстым, але, можа быць, трохі скрыты.

for i, item in enumerate(my_generator):
     do_stuff(item)

print 'Did things to {} items'.format(i)
1
дададзена

Выкарыстанне рэкурсіі і ў трынітарнага аператара :

def count_elements(list_):
    return 1 + count_elements(list_[1:]) if list_ else 0

print(count_elements(['apple', 'apple', 'orange', 'strawberry']))

выхад:

4
1
дададзена
Гэта вельмі неэфектыўна, як ітэрацыя [1:] будзе пастаянна ствараць новыя аб'екты спісу выклікае старыя быць выкінутыя (не кажучы ўжо пра накладных выдатках для самой рэкурсіі). Таксама ітэрацыі гэта няправільны тэрмін, калі вы выкарыстоўваеце <�я> спіс </я> доступ (спіс з'яўляецца ітэрацыі, але итератор не павінен быць спісам).
дададзена аўтар poke, крыніца
@poke: Я змяніў Iterable у Спіс _ . Я ведаю, што гэта не эфектыўна. Паколькі ОП не можа выкарыстоўваць LEN , я мяркую, што гэта практыкаванне для таго, каб навучыцца праграмаваць пітон. Таму я хацеў бы прапанаваць спосаб, выкарыстоўваць функцыі, якія, магчыма ОП не ведалі пра (рэкурсіі ...), і што не было ўжо прапанавана.
дададзена аўтар Sam Bruns, крыніца

Вам трэба проста замяніць няправільны выраз: Count = колькасць + садавіна

def countFruits(crops):
  count = 0
  for fruit in crops:
    count += 1
  return count

выраз для й у у, атрымлівае х, як аб'ект з спісу у, каб атрымаць нумар, які вы можаце выкарыстоўваць функцыю пералічыш (збожжавыя культуры), вяртанне аб'ект і нумар.  Іншы спосаб выкарыстання:

countFruits = lambda x: x.index(x[-1])+1

але лепшы спосаб выкарыстоўваць LEN (), вы можаце падаць у адстаўку імя:

countFruits = len
1
дададзена
def countFruits(crops):
    return max(enumerate(crops, 1))[0]
0
дададзена

Як выкарыстанне LEN() забаронена, я мяркую, што рэальны сэнс задачы даецца, каб вывучыць розныя метады ўнутры пітона.

рашэнне, выкарыстоўваючы функцыю вышэйшага парадку з паменшыць() </а>, лямбда і спісачная - так у асноўным большасць з пітона прысмакі ...

def countFruits(crops):
    return reduce(lambda x, y: x+y, [1 for _ in crops])

crops = ['apple','orange', 'banana'] 
print countFruits(crops)
0
дададзена