我有兩個清單:
nums = [2, 4, 5, 3, 6]
a = [64, 64, 64, 64, 64, 56, 56, 56, 63, 63, 63, 63, 63, 64, 66, 66, 66]
a我想使用串列遍歷nums串列。第一次,我想遍歷 a 的前兩位數字,因為那是nums. 然后,我想遍歷接下來的四個元素,a因為那是第二個元素nums,依此類推。
基本上,遍歷 [0, 2], [2, 4 2], [4 2, 4 2 5], [4 2 5, 4 2 5 3] 的a. 中的數字nums是我要在中迭代的元素數a。
a然后我想在該開始和停止索引中獲取大部分元素。所以,我這樣做了:
li = []
start = 0
stop = nums[0]
for j in range(len(nums)):
for item in itertools.islice(labels, start, nums[j]):
li.append(item)
c = Counter(li)
c.most_common()
value, count = c.most_common()[0]
print(value)
我如何更改開始和停止索引?謝謝!
uj5u.com熱心網友回復:
怎么樣,使用迭代器來讀取專案a而不是試圖找出索引?
nums = [2, 4, 5, 3, 6]
a = [64, 64, 64, 64, 64, 56, 56, 56, 63, 63, 63, 63, 63, 64, 66, 66, 66]
aa = iter(a)
try:
for n in nums:
li = [next(aa) for _ in range(n)]
# do whatever with these few elements
except StopIteration:
# the contents of `nums` exceeded the length of `a`
pass
uj5u.com熱心網友回復:
這是對@GreenCloakGuy 的回答的重寫。
您可以撰寫一個生成器,它產生如下塊:
def get_slices(iterable, numbers):
it = iter(iterable)
for n in numbers:
yield [next(it) for _ in range(n)]
如果您將不正確的值放入numbers. 如果這不是您的情況,您可以選擇將其靜音,如下所示islice:
def get_slices(iterable, numbers, silent=True):
it = iter(iterable)
for n in numbers:
if silent:
try:
yield [next(it) for _ in range(n)]
except StopIteration:
return
else:
yield [next(it) for _ in range(n)]
測驗:
def get_slices(iterable, numbers, silent=True):
it = iter(iterable)
for n in numbers:
if silent:
try:
yield [next(it) for _ in range(n)]
except StopIteration:
return
else:
yield [next(it) for _ in range(n)]
nums = [2, 4, 5, 3, 6]
a = [64, 64, 64, 64, 64, 56, 56, 56, 63, 63, 63, 63, 63, 64, 66, 66, 66]
for i in get_slices(a, nums, silent=True):
print(i)
輸出:
[64, 64]
[64, 64, 64, 56]
[56, 56, 63, 63, 63]
[63, 63, 64]
uj5u.com熱心網友回復:
您可能想要使用itertools.accumulate,因為您正在嘗試遍歷部分和索引中的串列,這樣的事情應該可以作業:
import itertools
from collections import Counter
for start, end in zip([0] nums, itertools.accumulate(nums)):
c = Counter(a[start:end])
print(c.most_common()[0][0]) # This is the value
該zip(...)操作允許您迭代成對的開始-停止索引,并且[0]在開頭確保您迭代的第一個切片是[0, nums[0]]
uj5u.com熱心網友回復:
獲取切片itertools.islice:
it = iter(a)
for num in nums:
print(*islice(it, num))
或沒有:
i = 0
for num in nums:
print(a[i : (i := i num)])
各自的輸出(在線試用!):
64 64
64 64 64 56
56 56 63 63 63
63 63 64
66 66 66
[64, 64]
[64, 64, 64, 56]
[56, 56, 63, 63, 63]
[63, 63, 64]
[66, 66, 66]
uj5u.com熱心網友回復:
這是對您的代碼的輕微修改,它會按照您的要求更改開始和停止索引:
import itertools
from collections import Counter
nums = [2, 4, 5, 3, 6]
a = [64, 64, 64, 64, 64, 56, 56, 56, 63, 63, 63, 63, 63, 64, 66, 66, 66]
li = []
start = 0
stop = nums[0]
for j in range(len(nums)):
for item in itertools.islice(a, start, stop):
li.append(item)
c = Counter(li)
c.most_common()
value, count = c.most_common()[0]
if j 1 < len(nums):
start = stop
stop = nums[j 1]
print(value)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/439280.html
下一篇:使用兩個條件重新排列子字串
