Python 如何根据变量进行自定义列表分组?
假设我有一个生成的列表,例如:Python 如何根据变量进行自定义列表分组?,python,list,grouping,list-comprehension,Python,List,Grouping,List Comprehension,假设我有一个生成的列表,例如: list_x = [0,1,2,3,4,5,6,7,8,9] 然后我把它分成这样: list_x = [01,23,45,67,89] def grouper(n, iterable): return zip(*[iter(iterable)]*n) list_x = [0,1,2,3,4,5,6,7,8,9] grp_count = 5 new_list = [''.join(map(str, g)) for g in grouper(grp_co
list_x = [0,1,2,3,4,5,6,7,8,9]
然后我把它分成这样:
list_x = [01,23,45,67,89]
def grouper(n, iterable):
return zip(*[iter(iterable)]*n)
list_x = [0,1,2,3,4,5,6,7,8,9]
grp_count = 5
new_list = [''.join(map(str, g)) for g in grouper(grp_count, list_x)]
print(new_list) #-> ['01234', '56789']
根据此列表:
list_x = [0,1,2,3,4,5,6,7,8,9]
grp_count = 2
new_list = map(int, [list_x[i+0]+list_x[i+1] for i in range(0, len(list_x)-1, grp_count)])
如何生成此代码,以便根据“grp\u count”将其分组
例如,如果组计数=5
:
list_x = [01234,56789]
我知道我必须以某种方式为每个分组大小的添加插入多个
列表x[I+n]
。这看起来很像来自
然后
给予
您可以使用
列表理解
执行以下示例中的技巧:
def grouper(a, num):
if num > int(len(a)/2):
return []
# If you need to return only a list of lists use:
# return [a[k:k+num] for k in range(0, len(a), num)]
return ["".join(map(str, a[k:k+num])) for k in range(0, len(a), num)]
a = [0,1,2,3,4,5,6,7,8,9]
print(grouper(a, 2))
print(grouper(a, 5))
输出:
['01', '23', '45', '67', '89']
['01234', '56789']
正如我在一篇评论中所说的,在Python中无法创建一个整数列表,该列表将显示为
[0123456789]
,因为Python不会显示带前导零的整数值。最接近的是[123456789]
但是,您可以创建一个字符串列表,其中包含以下数字:
list_x = [01,23,45,67,89]
def grouper(n, iterable):
return zip(*[iter(iterable)]*n)
list_x = [0,1,2,3,4,5,6,7,8,9]
grp_count = 5
new_list = [''.join(map(str, g)) for g in grouper(grp_count, list_x)]
print(new_list) #-> ['01234', '56789']
您的代码给出了
1,5,9,13,17
。这就是您需要的吗?Python默认情况下不会显示整数的前导零。返回格式应该是什么:列表中的字符串(Python中的字符列表)?元组?带返回的行非常可读,并且非常容易理解。。。不客气。很高兴这个答案对你有帮助。快乐编码。编辑时间超过5分钟:无需新导入,效果非常好。谢谢我仍然试图理解函数中嵌套循环的返回。看起来很复杂。你能解释一下为什么在zip()中使用*[iter(iterable)]*n
?我不明白背后的原因。谢谢。@Chiheb:为什么?因为,作为zip()
的参数使用,它是创建迭代器的一种紧凑方式,迭代器将以n
项组的形式从第二个参数返回元素。这就是你想知道的吗?如果用*([iter(iterable)]*n)
编写,可能会更容易理解。谢谢您的评论。这是我第一次看到像你这样的代码。我想即使在你发表评论之后,我也没有很好地理解。我将试着思考你的答案,试着理解你解决当前问题的方式。非常感谢你的评论。祝你今天愉快。@Chiheb:不客气。它几乎与itertools
模块文档部分中类似命名的配方相同。还要注意,表达式中的第一个*
使用了一个名为“”的东西将多个参数传递给zip()
函数。是的。谢谢你的链接。
def grouper(n, iterable):
return zip(*[iter(iterable)]*n)
list_x = [0,1,2,3,4,5,6,7,8,9]
grp_count = 5
new_list = [''.join(map(str, g)) for g in grouper(grp_count, list_x)]
print(new_list) #-> ['01234', '56789']