V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
u2gign
V2EX  ›  Python

求助 Python 问题

  •  
  •   u2gign · 2019-01-18 16:40:24 +08:00 · 1589 次点击
    这是一个创建于 1896 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个 list1 ['苹果','香蕉','梨'] 另一个 list2 是元组[('苹果','属性','10'),('芒果','属性','3','黄色'),...]

    想通过 list1 的元素来查找 list2 中符合的元组,并按照顺序放到一个新的 list3 中,如果没有找到的话 需要提示

          list3=[]
          for x in list1:
               for i in range(len(list2)):
                    if x == list2[i][0]:
                        list3.append(list2[i])
                        break
    

    但是如何来判断 没有找到的话 提示呢

    yangsi
        1
    yangsi  
       2019-01-18 16:59:00 +08:00 via iPhone
    [t for t in list2 if t[0] in list1] 这样? list1 如果太长先转成集合
    SeaRecluse
        2
    SeaRecluse  
       2019-01-18 17:03:29 +08:00
    ```py3
    list_1 = ["a","b","c"]
    list_2 = [("b","b_1","b_2"),("a","a_1")]
    list_2_all_enum = []
    list_3 = []
    for per_tuple in list_2:
    list_2_all_enum.append(per_tuple[0])

    for per_enum in list_1:
    try:
    list_3.append(list_2[list_2_all_enum.index(per_enum)])
    except:
    print("None")

    print(list_3)
    ```
    u2gign
        3
    u2gign  
    OP
       2019-01-18 17:04:20 +08:00
    @yangsi 不是重点 重点是如果没有在 list2 中找到 然后给出提示
    目前想到的 只能加一个循环次数 来判断
    不知道是否有直接判断 for 循环结束的方法
    dashboard
        4
    dashboard  
       2019-01-18 17:09:37 +08:00   ❤️ 2
    for else 了解一下
    rocksolid
        5
    rocksolid  
       2019-01-18 17:11:44 +08:00
    @u2gign 你这个里面的循环跑完怎么会判断不出来,最简单设个 bool 循环跑完 没进 if 就提示呗
    rocksolid
        6
    rocksolid  
       2019-01-18 17:13:04 +08:00
    要么就像楼上说的 for 外面加个 else,找不到的肯定没有 break 会进 else
    rabbbit
        7
    rabbbit  
       2019-01-18 17:14:12 +08:00
    ...list3=[]
    ......for x in list1:
    .........flag = False <--
    .........for i in range(len(list2)):
    ............ if x == list2[i][0]:
    ..................flag = True <--
    ..................list3.append(list2[i])
    ..................break
    .........if flag == False: <--
    ............print(x) <--
    zyj321321321
        8
    zyj321321321  
       2019-01-18 17:15:01 +08:00
    不知道怎么贴代码
    list3=[]
    for x in list1:
    for i in range(len(list2)):
    if x == list2[i][0]:
    list3.append(list2[i])
    break
    else:
    print("查不到"+x)
    我网上找了一下,竟然发现如此神奇的功能
    u2gign
        9
    u2gign  
    OP
       2019-01-18 17:16:55 +08:00
    @dashboard for else 确实神奇 第一次用哈
    yangsi
        10
    yangsi  
       2019-01-18 17:48:32 +08:00
    @u2gign

    for fruit in list1:
    for t in list2:
    if t[0] == fruit:
    list3.append(t)
    break
    else:
    print(fruit,'not found')
    yangsi
        11
    yangsi  
       2019-01-18 17:49:04 +08:00
    @yangsi 这个编辑器没有格式啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1009 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:02 · PVG 06:02 · LAX 15:02 · JFK 18:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.