鱼C论坛

 找回密码
 立即注册
查看: 2106|回复: 7

[已解决]如何便利数组并保证筛选结果

[复制链接]
发表于 2021-3-24 16:12:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
例如:
数组x = [[1,1,1,2,2,[1,2,2,1,1][2,2,1,1,1][2,2,3,3,3][1,2,2,3,3]]
如何便利第一列和第二列包含2的筛选结果有几条,如果我还要多条筛选又要筛选第一列第二列为2的结果和第4第5列筛选3的结果有几条呢?
最佳答案
2021-3-24 17:57:26
  1. x = [[1, 1, 1, 2, 2], [1, 2, 2, 1, 1],
  2.      [2, 2, 1, 1, 1], [2, 2, 3, 3, 3], [1, 2, 2, 3, 3]]
  3. find = input('输入需要查询的列,以空格分隔。').split(' ')
  4. num = int(input('请输入查询的值'))
  5. for each in x:
  6.     flag = 0
  7.     for every in find:
  8.         if each[int(every)-1] == num:
  9.             flag = 1
  10.             break
  11.     if flag == 1:
  12.         print(each)
复制代码


这个是某几列包含指定数字的

比如说列1和2,含有2的
会返回 列1 或 列 2 中,至少有一个是2的列表

如果是多个查询,比方说有列1列2 有 2 并且 列3列4有5的
自己修改一下输入的地方,把查询的列做成二维列表

然后依次遍历内容,去挨个匹配

每个原数据列表去匹配你的要求,匹配到了,count += 1
没匹配到,直接break跳出
看最后count 的数值是否和你查询限定要求的个数是否相同

相同则输出带有数据的列表,不同则访问下一个带有数据的列表

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-24 16:34:40 | 显示全部楼层
本帖最后由 笨鸟学飞 于 2021-3-24 16:37 编辑

为何不考虑下写出EXCEL文件利用EXCEL的筛选?
https://www.jianshu.com/p/0a45dffc265f

或者数据库
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-24 17:30:07 | 显示全部楼层
笨鸟学飞 发表于 2021-3-24 16:34
为何不考虑下写出EXCEL文件利用EXCEL的筛选?
https://www.jianshu.com/p/0a45dffc265f

我想用PYTHON写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 17:57:26 | 显示全部楼层    本楼为最佳答案   
  1. x = [[1, 1, 1, 2, 2], [1, 2, 2, 1, 1],
  2.      [2, 2, 1, 1, 1], [2, 2, 3, 3, 3], [1, 2, 2, 3, 3]]
  3. find = input('输入需要查询的列,以空格分隔。').split(' ')
  4. num = int(input('请输入查询的值'))
  5. for each in x:
  6.     flag = 0
  7.     for every in find:
  8.         if each[int(every)-1] == num:
  9.             flag = 1
  10.             break
  11.     if flag == 1:
  12.         print(each)
复制代码


这个是某几列包含指定数字的

比如说列1和2,含有2的
会返回 列1 或 列 2 中,至少有一个是2的列表

如果是多个查询,比方说有列1列2 有 2 并且 列3列4有5的
自己修改一下输入的地方,把查询的列做成二维列表

然后依次遍历内容,去挨个匹配

每个原数据列表去匹配你的要求,匹配到了,count += 1
没匹配到,直接break跳出
看最后count 的数值是否和你查询限定要求的个数是否相同

相同则输出带有数据的列表,不同则访问下一个带有数据的列表

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 23:11:14 | 显示全部楼层

  1. x = [[1, 1, 1, 2, 2],
  2.      [1, 2, 2, 1, 1],
  3.      [2, 2, 1, 1, 1],
  4.      [2, 2, 3, 3, 3],
  5.      [1, 2, 2, 3, 3]]

  6. # 按行统计
  7. # print(x[0].count(1)) # 统计 某行 某个值所出现的次数(按行统计)
  8. def count_in_row(data, which_row=1, value=0):
  9.     return data[which_row - 1].count(value)

  10. print(count_in_row(x, 1, 1)) # 第一行中 值为1的 出现了多少次

  11. # 按列统计
  12. def count_in_col(data, which_col=1, value=0):
  13.     col = []
  14.     for row in data:
  15.         # print(row[0]) # 第一列的
  16.         # col.append(row[0])
  17.         col.append(row[which_col - 1]) # 第几列的

  18.     return col.count(value)  # 统计该列内的某个值 所出现的次数(按列统计)
  19.     # print(col.count(1))
  20.    
  21. print(count_in_col(x, 2, 1)) # 第二列中 值为1的 出现了多少次

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 23:41:49 | 显示全部楼层
补充:或者用pandas模块(刚好我复习一下,^_)

  1. import pandas as pd
  2. x = [[1, 1, 1, 2, 2],
  3.      [1, 2, 2, 1, 1],
  4.      [2, 2, 1, 1, 1],
  5.      [2, 2, 3, 3, 3],
  6.      [1, 2, 2, 3, 3]]
  7. df = pd.DataFrame(x)
  8. print(df)

  9. print(list(df.iloc[0]).count(1)) # 第一行中 值为1的 出现了多少次

  10. print(list(df[1]).count(1)) # 第二列中 值为1的 出现了多少次
复制代码


.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-25 18:15:20 | 显示全部楼层

请问我如果筛选第一行2,第一行1的话怎么实现啊?头都大了,基本功不扎实后面停更了又没学
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-25 19:52:45 | 显示全部楼层
Daniel_Zhang 发表于 2021-3-24 17:57
这个是某几列包含指定数字的

比如说列1和2,含有2的

谢谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-26 03:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表