Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据变量进行自定义列表分组?_Python_List_Grouping_List Comprehension - Fatal编程技术网

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']