මෙහි වෙනත් පිළිතුරු විවේචනය කිරීම:
මෙම පිළිතුරු කිසිවක් ඒකාකාර ප්රමාණයේ කුට්ටි නොවේ, ඒවා සියල්ලම අවසානයේ රන්ට් කැබැල්ලක් තබයි, එබැවින් ඒවා සම්පූර්ණයෙන්ම සමතුලිත නොවේ. වැඩ බෙදා හැරීම සඳහා ඔබ මෙම කාර්යයන් භාවිතා කරන්නේ නම්, ඔබ අනෙක් අය ඉදිරියේ හොඳට වැඩ නිම කිරීමේ අපේක්ෂාව ගොඩනඟා ගෙන ඇත, එබැවින් අනෙක් අය දිගින් දිගටම වෙහෙස මහන්සි වී වැඩ කරන අතර එය කිසිවක් නොකර වාඩි වනු ඇත.
උදාහරණයක් ලෙස, වත්මන් ඉහළ පිළිතුර අවසන් වන්නේ:
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74]]
මම අන්තිමට වෛර කරනවා!
අනෙක් අය, කැමති list(grouper(3, xrange(7)))
, සහ chunk(xrange(7), 3)
දෙදෙනාම ආපසු පැමිණේ : [(0, 1, 2), (3, 4, 5), (6, None, None)]
. මෙම None
නිකමට පිරවුම අතර, මගේ මතය වෙනුවට inelegant. ඒවා ඒකාකාරව කප්පාදු නොකරයි.
අපට මේවා වඩා හොඳින් බෙදිය නොහැක්කේ ඇයි?
මගේ විසඳුම (ය)
මෙහි සමබර විසඳුමක්, මම නිෂ්පාදනය සඳහා යොදා ගන්නා තියෙනවා උත්සවයකට (ආදේශ කිරීමට Python 3 සටහන අනුවර්තනය xrange
සමග range
):
def baskets_from(items, maxbaskets=25):
baskets = [[] for _ in xrange(maxbaskets)] # in Python 3 use range
for i, item in enumerate(items):
baskets[i % maxbaskets].append(item)
return filter(None, baskets)
මම ජනක යන්ත්රයක් නිර්මාණය කළෙමි, ඔබ එය ලැයිස්තුවකට දැමුවහොත් එය එසේම වේ:
def iter_baskets_from(items, maxbaskets=3):
'''generates evenly balanced baskets from indexable iterable'''
item_count = len(items)
baskets = min(item_count, maxbaskets)
for x_i in xrange(baskets):
yield [items[y_i] for y_i in xrange(x_i, item_count, baskets)]
අවසාන වශයෙන්, ඉහත සියළු කාර්යයන් මූලද්රව්යයන් අනුපිළිවෙලින් නැවත ලබා දෙන බව මා දකින බැවින් (ඒවා ලබා දී ඇති පරිදි):
def iter_baskets_contiguous(items, maxbaskets=3, item_count=None):
'''
generates balanced baskets from iterable, contiguous contents
provide item_count if providing a iterator that doesn't support len()
'''
item_count = item_count or len(items)
baskets = min(item_count, maxbaskets)
items = iter(items)
floor = item_count // baskets
ceiling = floor + 1
stepdown = item_count % baskets
for x_i in xrange(baskets):
length = ceiling if x_i < stepdown else floor
yield [items.next() for _ in xrange(length)]
ප්රතිදානය
ඒවා පරීක්ෂා කිරීමට:
print(baskets_from(xrange(6), 8))
print(list(iter_baskets_from(xrange(6), 8)))
print(list(iter_baskets_contiguous(xrange(6), 8)))
print(baskets_from(xrange(22), 8))
print(list(iter_baskets_from(xrange(22), 8)))
print(list(iter_baskets_contiguous(xrange(22), 8)))
print(baskets_from('ABCDEFG', 3))
print(list(iter_baskets_from('ABCDEFG', 3)))
print(list(iter_baskets_contiguous('ABCDEFG', 3)))
print(baskets_from(xrange(26), 5))
print(list(iter_baskets_from(xrange(26), 5)))
print(list(iter_baskets_contiguous(xrange(26), 5)))
මුද්රණය කරන්නේ කුමක්ද:
[[0], [1], [2], [3], [4], [5]]
[[0], [1], [2], [3], [4], [5]]
[[0], [1], [2], [3], [4], [5]]
[[0, 8, 16], [1, 9, 17], [2, 10, 18], [3, 11, 19], [4, 12, 20], [5, 13, 21], [6, 14], [7, 15]]
[[0, 8, 16], [1, 9, 17], [2, 10, 18], [3, 11, 19], [4, 12, 20], [5, 13, 21], [6, 14], [7, 15]]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19], [20, 21]]
[['A', 'D', 'G'], ['B', 'E'], ['C', 'F']]
[['A', 'D', 'G'], ['B', 'E'], ['C', 'F']]
[['A', 'B', 'C'], ['D', 'E'], ['F', 'G']]
[[0, 5, 10, 15, 20, 25], [1, 6, 11, 16, 21], [2, 7, 12, 17, 22], [3, 8, 13, 18, 23], [4, 9, 14, 19, 24]]
[[0, 5, 10, 15, 20, 25], [1, 6, 11, 16, 21], [2, 7, 12, 17, 22], [3, 8, 13, 18, 23], [4, 9, 14, 19, 24]]
[[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25]]
පරස්පර උත්පාදක යන්ත්රය අනෙක් දෙක මෙන් එකම දිග රටාවකින් කුට්ටි සපයන බව සලකන්න, නමුත් අයිතම සියල්ලම පිළිවෙලට ඇති අතර ඒවා එකිනෙකට සමාන ලෙස බෙදී ඇති අතර ඒවා එකිනෙකට වෙනස් මූලද්රව්ය ලැයිස්තුවක් බෙදිය හැකිය.