我有一个像这样的numpy数组:
[[0 1 0]
[1 2 1]
[2 2 1]
[3 0 0]
[4 0 1]
[5 1 2]
[6 0 1]
[7 1 0]
[8 1 2]]
第一列是索引,其他两列是位置x,y。
我想获取具有相同x,y位置的索引列表。
例如,对于上面的输入,输出可以像每行中的一组索引:
groups = [[0,7],
[1,2],
[4,6],
[5,8],
[3]]
因此,每一行代表一组具有相同位置x,y的索引。 5个组,其中4个组具有2个成员,而请注意,最后一行仅显示索引3。该组只有一个索引,即3。
我如何在python中实现呢?
答案 0 :(得分:1)
检查一下:
lis = [[0 ,1, 0],
[1, 2, 1],
[2, 2, 1],
[3, 0, 0],
[4, 0, 1],
[5, 1, 2],
[6, 0, 1],
[7, 1, 0],
[8, 1, 2]]
dic = {}
for x,y,z in lis:
if dic.get((y,z)):
dic[(y,z)].append(x)
else:
dic[(y, z)] = [x]
final_list = [dic[key] for key in dic.keys()]
print(final_list)
答案 1 :(得分:1)
您似乎想要按操作分组的功能。最好的选择是将其转换为熊猫数据框,然后进行分组。
import pandas as pd
a = [[0, 1, 0], [1, 2, 1], [2, 2, 1],
[3, 0, 0], [4, 0, 1], [5, 1, 2],
[6, 0, 1], [7, 1, 0], [8, 1, 2]]
df = pd.DataFrame(a, columns =['index', 'x', 'y'])
grouped_df = df.groupby(['x', 'y']).aggregate(lambda x: tuple(x)).reset_index()
print(grouped_df)
输出:
x y index
0 0 0 (3,)
1 0 1 (4, 6)
2 1 0 (0, 7)
3 1 2 (5, 8)
4 2 1 (1, 2)
答案 2 :(得分:1)
使用collections.defaultdict
的其他选项:
l = [[0, 1, 0],
[1, 2, 1],
[2, 2, 1],
[3, 0, 0],
[4, 0, 1],
[5, 1, 2],
[6, 0, 1],
[7, 1, 0],
[8, 1, 2]]
s = [(l1[0], l1[1:]) for l1 in l]
s = [[x for x, y in s if y == b] for a, b in s]
s = [y for x, y in enumerate(s) if y not in s[:x]]
print(s)
然后您可以致电
[[0, 7], [1, 2], [3], [4, 6], [5, 8]]
答案 3 :(得分:0)
以最简单的方式,不使用任何程序包;
UIScrollViewDelegate.scrollViewDidEndScrollingAnimation
输出
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
if scrollView.contentSize.height > lastContentHeight {
self.tableView.scrollToBottom()
self.lastContentHeight = scrollView.contentSize.height
}
}