ezKit 1.9.8__py3-none-any.whl → 1.9.9__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
ezKit/utils.py CHANGED
@@ -8,6 +8,7 @@ import subprocess
8
8
  import time
9
9
  import tomllib
10
10
  from copy import deepcopy
11
+ from itertools import islice
11
12
  from multiprocessing import Pool, Process
12
13
  from multiprocessing.pool import ThreadPool
13
14
  from pathlib import Path
@@ -352,90 +353,57 @@ def list_dict_sorted_by_key(
352
353
  logger.exception(e)
353
354
  return None
354
355
 
355
-
356
356
  def list_split(
357
357
  data: list,
358
358
  number: int,
359
359
  equally: bool = False
360
360
  ) -> list | None:
361
- """list split"""
361
+ """列表分割"""
362
+
362
363
  # 列表分割
363
364
  #
364
- # 默认: 将 list 以 number个元素为一个list 分割
365
- #
366
- # data = [1, 2, 3, 4, 5, 6, 7]
367
- #
368
- # list_split(data, 2) -> 将 data 以 2个元素为一个 list 分割
369
- # [[1, 2], [3, 4], [5, 6], [7]]
365
+ # 默认: 将 list 以 number 个元素为一个子 list 分割
370
366
  #
371
- # list_split(data, 3) -> data 3个元素为一个 list 分割
372
- # [[1, 2, 3], [4, 5, 6], [7]]
367
+ # data = [1, 2, 3, 4, 5, 6, 7] 奇数个元素
368
+ # list_split(data, 2) -> [[1, 2], [3, 4], [5, 6], [7]] 将 data 以 2个元素 为一个 list 分割
369
+ # list_split(data, 3) -> [[1, 2, 3], [4, 5, 6], [7]] 将 data 以 3个元素 为一个 list 分割
373
370
  #
374
- # equally True 时, data 平均分成 number
371
+ # data = [1, 2, 3, 4, 5, 6, 7, 8] 偶数个元素
372
+ # list_split(data, 2) -> [[1, 2], [3, 4], [5, 6], [7, 8]] 将 data 以 2个元素 为一个 list 分割
373
+ # list_split(data, 3) -> [[1, 2, 3], [4, 5, 6], [7, 8]] 将 data 以 3个元素 为一个 list 分割
375
374
  #
376
- # data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
375
+ # equally True 时, list 平均分成 number 个元素的子 list
377
376
  #
378
- # list_split_equally(data, 5) -> data 平均分成 5
379
- # [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19]]
377
+ # data = [1, 2, 3, 4, 5, 6, 7] 奇数个元素
378
+ # list_split(data, 2, True) -> [[1, 2, 3, 4], [5, 6, 7]] data 平均分成 2个子list
379
+ # list_split(data, 3, True) -> [[1, 2, 3], [4, 5, 6], [7]] 将 data 平均分成 3个子list
380
380
  #
381
- # list_split_equally(data, 6) -> data 平均分成 6
382
- # [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10], [11, 12, 13], [14, 15, 16], [17, 18, 19]]
383
- #
384
- # list_split_equally(data, 7) -> 将 data 平均分成 7 份
385
- # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17], [18, 19]]
386
-
387
- try:
388
-
389
- # 数据拷贝
390
- _data_object = deepcopy(data)
381
+ # data = [1, 2, 3, 4, 5, 6, 7, 8] 偶数个元素
382
+ # list_split(data, 2, True) -> [[1, 2, 3, 4], [5, 6, 7, 8]] data 平均分成 2个子list
383
+ # list_split(data, 3, True) -> [[1, 2, 3], [4, 5, 6], [7, 8]] 将 data 平均分成 3个子list
391
384
 
392
- # 数据长度
393
- _data_length = len(_data_object)
394
-
395
- # 数据平分后的结果
396
- _data_result = []
397
-
398
- _step_number: Optional[int] = None
399
-
400
- if _data_length < number:
385
+ # 判断参数是否正确
386
+ match True:
387
+ case True if not isTrue(data, list):
388
+ logger.error("argument error: data")
401
389
  return None
390
+ case True if not isTrue(number, int):
391
+ logger.error("argument error: number")
392
+ return None
393
+ case _:
394
+ pass
402
395
 
403
- if _data_length == number:
404
-
405
- _data_result = [[i] for i in _data_object]
406
-
407
- else:
408
-
409
- if isTrue(equally, bool):
410
-
411
- _step_number = step_number_for_split_equally(_data_length, number)
412
-
413
- if _data_length % number == 0:
414
-
415
- index_number_list = list(range(0, _data_length, number))
416
- for index_number in index_number_list:
417
- _data_result.append(deepcopy(_data_object[index_number:index_number + number]))
418
-
419
- else:
420
-
421
- # 前一部分
422
- if _step_number is not None:
423
- previous_end_number = (_data_length % number) * _step_number
424
- previous_index_number_list = list(range(0, previous_end_number, _step_number))
425
- for index_number in previous_index_number_list:
426
- _data_result.append(deepcopy(_data_object[index_number:index_number + _step_number]))
427
-
428
- # 后一部分
429
- next_number_list = list(range(previous_end_number, _data_length, _step_number - 1))
430
- for index_number in next_number_list:
431
- _data_result.append(deepcopy(_data_object[index_number:index_number + (_step_number - 1)]))
432
-
433
- else:
396
+ try:
434
397
 
435
- for index_number in list(range(0, _data_length, number)):
436
- _data_result.append(deepcopy(_data_object[index_number:index_number + number]))
398
+ # 要将列表平均分成 n 个子列表
399
+ if isTrue(equally, bool):
400
+ it = iter(data)
401
+ chunk_size = (len(data) + number - 1) // number # 每组至少多少个元素
402
+ return [list(islice(it, chunk_size)) for _ in range(number)]
437
403
 
438
- return _data_result
404
+ # 将列表按每 n 个元素为一个列表进行分割
405
+ it = iter(data)
406
+ return [list(islice(it, number)) for _ in range((len(data) + number - 1) // number)]
439
407
 
440
408
  except Exception as e:
441
409
  logger.exception(e)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ezKit
3
- Version: 1.9.8
3
+ Version: 1.9.9
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -11,10 +11,10 @@ ezKit/redis.py,sha256=g2_V4jvq0djRc20jLZkgeAeF_bYrq-Rbl_kHcCUPZcA,1965
11
11
  ezKit/sendemail.py,sha256=tRXCsJm_RfTJ9xEWe_lTQ5kOs2JxHGPXvq0oWA7prq0,7263
12
12
  ezKit/stock.py,sha256=cbL0ZXCur4G290wFN5ynmLmMjgDRNSvVQgsE_0jSQKU,11802
13
13
  ezKit/token.py,sha256=HKREyZj_T2S8-aFoFIrBXTaCKExQq4zE66OHXhGHqQg,1750
14
- ezKit/utils.py,sha256=-gvuVXSoYRIjjuHfE0WYr2BegetpFCfY-juo3253FMs,43900
14
+ ezKit/utils.py,sha256=H-VaWzH1TkpJe_lpPBW2yaP6R7NElDbHRTsByRj_t9w,43234
15
15
  ezKit/xftp.py,sha256=XyIdr_2rxRVLqPofG6fIYWhAMVsFwTyp46dg5P9FLW4,7774
16
- ezKit-1.9.8.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
17
- ezKit-1.9.8.dist-info/METADATA,sha256=wCl9POdJB7m1pfOX7wQYCreg9jUg49M4DeR2jZEUBDk,190
18
- ezKit-1.9.8.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
19
- ezKit-1.9.8.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
20
- ezKit-1.9.8.dist-info/RECORD,,
16
+ ezKit-1.9.9.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
17
+ ezKit-1.9.9.dist-info/METADATA,sha256=i9NRcyP11nSCxo9bCngbdreKObAoIebkPJz5Sh1EiR0,190
18
+ ezKit-1.9.9.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
19
+ ezKit-1.9.9.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
20
+ ezKit-1.9.9.dist-info/RECORD,,
File without changes
File without changes