鱼C论坛

 找回密码
 立即注册
查看: 1720|回复: 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
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]]
find = input('输入需要查询的列,以空格分隔。').split(' ')
num = int(input('请输入查询的值'))
for each in x:
    flag = 0
    for every in find:
        if each[int(every)-1] == num:
            flag = 1
            break
    if flag == 1:
        print(each)

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

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

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

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

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

或者数据库
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我想用PYTHON写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 17:57:26 | 显示全部楼层    本楼为最佳答案   
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]]
find = input('输入需要查询的列,以空格分隔。').split(' ')
num = int(input('请输入查询的值'))
for each in x:
    flag = 0
    for every in find:
        if each[int(every)-1] == num:
            flag = 1
            break
    if flag == 1:
        print(each)

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

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

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

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

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 23:11:14 | 显示全部楼层
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]]

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

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

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

    return col.count(value)  # 统计该列内的某个值 所出现的次数(按列统计)
    # print(col.count(1)) 
    
print(count_in_col(x, 2, 1)) # 第二列中 值为1的 出现了多少次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 23:41:49 | 显示全部楼层
补充:或者用pandas模块(刚好我复习一下,^_)
import pandas as pd
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]]
df = pd.DataFrame(x)
print(df)

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

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

.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

请问我如果筛选第一行2,第一行1的话怎么实现啊?头都大了,基本功不扎实后面停更了又没学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

谢谢哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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