def isFloat(string): try: float(string) return True except ValueError: return False def listToStr(list, sep = ", ", last_sep = " and "): l = len(list) if l > 0: res = str(list[0]) for i in range(1, l - 1): res += (sep + list[i]) if l > 1: res += (last_sep + list[l - 1]) else: res = "" return res def StgFromRound(round, rou_per_stg): return ((round - 1) // rou_per_stg) + 1 def DistributeInGroups(atoms, groups, sample, capacities): n = len(atoms) len_sample = len(sample) min_cap = min([capacities[s] for s in sample]) i = 0 bin = 0 res = [] while i < n - min_cap + 1: sam = sample[bin % len_sample] left = n - i cap = capacities[sam] if left >= cap: #partial = [[groups[sam], [atoms[j] for j in range(i,i+cap)]]] partial = [{'group':groups[sam], 'atoms':[atoms[j] for j in range(i,i+cap)]}] res = res + partial i += cap bin += 1 if n - i > 0: res += [{'group':-1, 'atoms':[atoms[j] for j in range(i,n)]}] return res