sách gpt4 ai đã đi

Phân chia danh sách dựa trên các nhóm phần tử của cùng một danh sách, theo Python

In lại 作者:行者123 更新时间:2023-11-28 20:00:25 44 4
mua khóa gpt4 Nike

Tôi có một cái扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如:

[7,56,1, 8,0,0, 2,0,0, 6,1,1, 7,2,0, 2,99,1]

我想(以 Python 方式)处理此列表以根据“标志”的值创建一个新的数字列表:如果“标志”为 1,则我需要“数字”,否则为 0。所以上面的列表会变成:

[7, 0, 0, 6, 0, 2]

我最初的尝试是:

list = [7,56,1, 8,0,0, 2,0,0, 6,1,1, 7,2,0, 2,99,1]
numbers = list[::3]
flags = list[2::3]

result = []
for i,number in enumerate(numbers):
result.append(number if flags[i] == 1 else 0)

这行得通,但在我看来应该有更好的方法从列表中干净地提取元组。像这样的东西:

list = [7,56,1, 8,0,0, 2,0,0, 6,1,1, 7,2,0, 2,99,1]
for (number, __, flag) in list:
...etc

但是我好像做不到。

我可以循环遍历整个列表:

result = []
for i in range(0, len(list), 3):
result.append(list[i] if list[i+2] == 1 else 0)

这看起来更小也更高效。

我不清楚这里的最佳选择。任何建议将不胜感激。

Để ý:我已经接受了wim的回答:

[L[i]*L[i+2] for i in range(0, len(L), 3)]

但要重申 wims 和 ShadowRangers 响应都有效。我接受了基于简单明了的 wim 的回答(并且,在较小程度上,与 python 2 的兼容性,尽管 ShadowRanger 指出 zip 也在 Py2 中,所以这个基础是无效的)。

ShadowRanger 的回答:

[number if flag else 0 for number, _, flag in zip(*[iter(mylist)]*3)]

也完全符合我的想法(提供元组),但有点晦涩难懂并且需要 zip。正如 wim 指出的那样,ShadowRanger 的答案非常适合数据流而不是固定列表。

我还要指出,ShadowRanger 的回答增加了对 zip() 的模糊使用(随着时间的推移会变得不那么模糊),但是通过使用元组的命名值增加了清晰度,所以这有点赢/输。

对于那些努力理解 zip(*[iter(mylist)]*3)] 的人来说,它创建了一个迭代器的三个副本,然后用于构造元组。因为它是同一个迭代器,所以每次使用都会推进迭代器,使元组完全符合我的要求。

为了清楚和通用,我也有点倾向于@ShadowRanger 的解决方案的修改版本:

i = iter(mylist)
[number if flag else 0 for number, _, flag in zip(i, i, i)]

(对我来说,这似乎不那么晦涩)。

1 Câu trả lời

我认为最直接的方法是简单的列表理解:

>>> [L[i]*L[i+2] for i in range(0, len(L), 3)]
[7, 0, 0, 6, 0, 2]

或者考虑 numpy,它对于这样的任务非常强大:

>>> import numpy as np
>>> a = np.array(L).reshape(-1, 3).T
>>> một
array([[ 7, 8, 2, 6, 7, 2],
[56, 0, 0, 1, 2, 99],
[ 1, 0, 0, 1, 0, 1]])
>>> a[0]*a[2]
array([7, 0, 0, 6, 0, 2])

关于python - python 列表的子集基于同一列表的元素组,pythonically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58091360/

44 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com