我需要計算“Eagle”在隨機生成的串列中連續出現 2 次的次數。如果 ['Eagle', 'Eagle', 'Eagle', 'Eagle'] 應該算 2,而不是 3
import random
def HeadsOrTails(amo):
amo1 = []
Coin = ['Eagle', 'Tails']
for i in range(amo):
amo1.append(random.choice(Coin))
return amo1
count = 0
for i in range(len(HeadsOrTails(30))):
if HeadsOrTails(30)[i] == 'Eagle':
if HeadsOrTails(30)[i] == HeadsOrTails(30)[i 1]:
count = 1
else:
continue
print(HeadsOrTails(30))
print(f' Eagle repeats {count} times in the list')
由于某種原因,它錯誤地計算了值的數量
uj5u.com熱心網友回復:
使用 while 回圈并在匹配時增加索引器:
def count2(l):
i = 1
count = 0
while i < len(l):
if l[i] == l[i-1] == 'Eagle': # if both values are "Eagle"
count = 1 # increment the counter
i = 1 # and skip a step (with below, equivalent to i = 2)
i = 1 # increment to next step
return count
例子:
count2(['Eagle', 'Eagle', 'Eagle', 'Eagle'])
# 2
count2(['Eagle', 'Eagle', 'Eagle'])
# 1
count2(['Eagle', 'Eagle', 'Tails', 'Eagle'])
# 1
count2(['Eagle', 'Eagle'])
# 1
count2(['Eagle'])
# 0
count2([])
# 0
泛化(計算 n 個連續值)
您可以使用切片和比較 a set:
def countn(l, n=2, match='Eagle'):
i = n-1 # start at n-1 position
count = 0
while i < len(l):
if set(l[i-n 1:i 1]) == {match}: # if all values of the slice are "match" (= consecutive match)
count = 1 # increment counter
i = n # and skip n steps
else:
i = 1 # else, go to the next step
return count
例子:
countn(['Eagle', 'Eagle', 'Eagle', 'Eagle', 'Eagle', 'Eagle'], n=3)
# 2
countn(['Eagle', 'Eagle', 'Eagle', 'Eagle', 'Eagle'], n=3)
# 1
countn(['Eagle', 'Eagle', 'Eagle'], n=3)
# 1
countn(['Eagle', 'Eagle', 'Tails', 'Eagle'], n=3)
# 0
countn([], n=3)
# 0
uj5u.com熱心網友回復:
您應該只生成一次串列。
如果 2 個相鄰的專案都是,Eagle那么你跳到 2 個專案,否則你只跳過一個。
list_size = 30
my_list = heads_or_tails(list_size)
count = 0
i = 0
while i < list_size -1:
if my_list[i] == my_list[i 1] == 'Eagle':
count =1
i =2
else:
i =1
print(count)
uj5u.com熱心網友回復:
一旦你建立了 Heads 和 Tails 串列,你應該迭代它,將當前元素與前面的元素第一個索引位置進行比較。如果它們相同(HEAD),則將索引推進 2 否則遞增 1。
所以:
import random
HEAD = 'Eagle'
TAIL = 'Tail'
PAIR = [HEAD, HEAD]
N = 30
def HeadsOrTails(n):
return random.choices([HEAD, TAIL], k=n)
coins = HeadsOrTails(N)
i, c = 0, 0
while i < len(coins) - 1:
if coins[i:i 2] == PAIR:
c = 1
i = 2
else:
i = 1
print(coins)
print(c)
uj5u.com熱心網友回復:
當你這樣做時HeadsOrTails(30),每次它都會計算一個新的。然后為了做你所期望的,呼叫它一次并將其結果存盤在一個變數中。
而且您的代碼無法控制我們在一組超過 3 人中的事實。我添加了這個。
import random
def heads_or_tails(amo):
amo1 = []
coin = ["Eagle", "Tails"]
for i in range(amo):
amo1.append(random.choice(coin))
return amo1
my_head_or_tails = heads_or_tails(30)
count = 0
already_in_pair = False
for i in range(len(my_head_or_tails)):
current_is_eagle = my_head_or_tails[i] == "Eagle"
try:
next_is_eagle = my_head_or_tails[i 1] == "Eagle"
except IndexError:
next_is_eagle = False
if current_is_eagle and next_is_eagle and not already_in_pair:
count = 1
already_in_pair = True
else:
already_in_pair = False
print(my_head_or_tails)
print(f" Eagle repeats {count} times in the list")
uj5u.com熱心網友回復:
還有另一種方法。建立職位串列,然后檢查職位是否存在于串列中。我們回傳 pos_list 并列印該串列的長度,而不是計數。
import random
def heads_or_tails(amo):
amo1 = []
coin = ['Eagle', 'Tails']
for i in range(amo):
amo1.append(random.choice(coin))
return amo1
def get_count(searchstr='Eagle'):
pos = []
_lst = heads_or_tails(10)
for j in range(len(_lst)):
try:
if _lst[j] == searchstr and _lst[j 1] == searchstr:
if j not in pos and j-1 not in pos:
pos.append(j)
else:
continue
except IndexError:
pass
return _lst, pos, searchstr
search_list, pos_lst, search_str = get_count()
print(search_list)
print(f'{search_str} repeats {len(pos_lst)} times in the list')
uj5u.com熱心網友回復:
import numpy as np
lst = list(np.random.choice(['Eagle', 'Tails'], size=10))
print(lst)
count = 0
pt = ''
while len(lst):
item = lst.pop(0)
if pt == item and pt == 'Eagle':
pt = ''
count = 1
else:
pt = item
print(count)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/461543.html
