找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1318|回复: 6

[求助] 如何检索list中的元素

[复制链接]
发表于 2022-8-19 17:38:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 leeech 于 2022-8-19 17:39 编辑

最近在写一个卡牌游戏,用list来存储卡牌的数据
如 define no12345 = ["快龙","龙族",6,2,3,4],define no56789 = ["炽焰咆啸虎","兽族",6,2,3,4]这样
请问如何通过list里的元素来判定调用的list
比如,我需要用一张种族为龙族的卡片,他就会帮我检索出"快龙"
希望提供一个思路,最好能有示例
发表于 2022-8-19 20:37:35 | 显示全部楼层
呃,我觉得您并没能理解,作为新手,您应该首先学习python而不是renpy
python 2/3有中文文档,国内也有比较简单的教程,百度一搜就能找到

重复性的工作应该交给计算机而不是手写,请学会使用循环语句
仔细想想,我觉得您甚至没能入门,编程思想存在不足,可能需要学习基础的一些算法

以下给出第一种方法的参考,但我建议系统学习过编程思想和python 2/3再来看看,基于python 3.7:
[RenPy] 纯文本查看 复制代码
cards = []
cards.append(['龙', '稀有', 1, 2])
cards.append(["兽", "稀有", 1, 2])
cards.append(["龙", "普通", 1, 2])

x = list(filter(lambda x: x[0] == '龙', cards))
y = list(filter(lambda x: x[1] == '稀有', cards))
z = list(filter(lambda x: x[0] == '龙' and x[1] == '稀有', cards))

print(x)
print(y)
print(z)



看到您还要求能对不同属性进行检索,那第二种方法dict可能不太合适了

顺便,用list存储卡牌可不是个好主意,当然您还是新手就算了,不过我仍建议使用类(面向对象)

p.s. 这需求简直就是在让我写数据库查找,sql能很轻松解决这些问题的,可惜放这里有些大材小用
回复 支持 1 抱歉 0

使用道具 举报

发表于 2022-8-19 19:09:05 | 显示全部楼层
给两个思路吧,假定我理解没错的话:

1. 把所有卡牌放在一个list中,就是`cards=[card_1, card_2, ]`,换句话说就是二维数组(按你说的,card_1是个list),然后写个方法来线性查找(卡牌不多的话)

2. 建立一个种族-卡牌映射表,用dict即可,即`cards = {'种族1': [card_1, card_2, ], '种族2': [card_3, card_4, ], }`,然后想要什么类型就直接cards['种族1']就能得到多个符合条件的卡牌
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2022-8-19 19:20:59 | 显示全部楼层
Lost 发表于 2022-8-19 19:09
给两个思路吧,假定我理解没错的话:

1. 把所有卡牌放在一个list中,就是`cards=[card_1, card_2, ]`,换 ...

第一个理解了,就是列表嵌套列表,第二个能给出文档相关资料,没有接触过
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2022-8-19 19:49:47 | 显示全部楼层
Lost 发表于 2022-8-19 19:09
给两个思路吧,假定我理解没错的话:

1. 把所有卡牌放在一个list中,就是`cards=[card_1, card_2, ]`,换 ...

我是新手,先谢过大佬给出的两个思路
假设是第一种方法
define no1 =["龙","稀有",1,2]
define no2 =["兽","稀有",1,2]
define no3 =["龙","普通",1,2]
default jiansuo = [0,0,0]
然后在主流程里
"检索龙"
if no1[0] == "龙":
    if jiansuo[0] == 0:
        $ jiansuo[0] = no1
    elif jiansuo[1] == 0:
        $ jiansuo[1] = no1
    elif jiansuo[2] == 0:
        $ jiansuo[2] = no1
if no2[0] == "龙"
    if jiansuo[0] == 0:
        $ jiansuo[0] = no2
    elif jiansuo[1] == 0:
        $ jiansuo[1] = no2
    elif jiansuo[2] == 0:
        $ jiansuo[2] = no2
if no3[0] == "龙"
    if jiansuo[0] == 0:
        $ jiansuo[0] = no3
    elif jiansuo[1] == 0:
        $ jiansuo[1] = no3
    elif jiansuo[2] == 0:
        $ jiansuo[2] = no3
"[jiansuo]"
这样可行吗?
如果是这样的话,如果检索稀有度得到一个新列表jiansuo2
怎么取得jiansuo和jiansuo2的交集,也就是同时取得"龙"和"稀有度"的检索结果
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2022-8-19 23:44:39 | 显示全部楼层
Lost 发表于 2022-8-19 20:37
呃,我觉得您并没能理解,作为新手,您应该首先学习python而不是renpy
python 2/3有中文文档,国内也有比较 ...

感谢指导,因为是个小白,很多东西不懂,都是一点一点摸着来的
我先接触的renpy才因为renpy看了一丢丢的py,十分感谢!
回复 支持 抱歉

使用道具 举报

发表于 2022-8-22 08:32:26 | 显示全部楼层
本帖最后由 被诅咒的章鱼 于 2022-8-22 09:04 编辑

并不针对楼主的问题,闲扯几句其他的吧……

“数据结构”往往是一门大学计算机专业都要学习的课程。内容极其枯燥和抽象,初学完全不知道整那些有个P用……直到在实际开发过程中才会发现数据结构作为编程领域的一种经验总结是如何基础和重要。
列表作为一种非常基础和“简单”的数据结构,在各种编程语言中都有标准库实现(implementation)。列表的两个核心特点是:列表长度可变 和 根据索引查找元素

不过在Python中的列表有点特殊,它在其他语言中一般称作“ArrayList”。其他语言中的列表(List)是泛型容器,需要显式声明容器内元素的类型,只能存储声明类型的数据;而ArrayList则可以存放任意类型的元素(严谨的说法是万物之父Object类的所有派生类对象实例)。另外,其实Python中其他容器也类似,可以存放任意类型元素。

这种高自由的设计原意是什么,我不清楚。从使用角度来看,把一堆各不相同类型的值扔进同一个列表中,通常只是数据处理的第一步
例如,从网络上获取了一个数据集,还不确定字段数量和类型是否符合两端的协议,先放在一个List中看看长度。或者从数据库中查找到一些数据,先缓存在List中。之后必然会根据列表索引使用对应元素生成适合使用的对象。这里关键的“适合使用”根据实际需求而定。例如,根据某个字段查找对象是否存在(楼主的需求就是这个);例如,根据某些字段可比较对象的大小,用于排序;例如,某些字段可进行加减运算,实现合并。所有的需求都想在列表这个标准容器上实现,真的有点难为它了……
回复 支持 抱歉

使用道具 举报

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

本版积分规则

小黑屋|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2024-4-29 17:44 , Processed in 0.065988 second(s), 14 queries , File On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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