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
alfina
V2EX  ›  Python

请问有没有自动定义生成列表的方法

  •  
  •   alfina · 2021-08-31 02:40:27 +08:00 · 1405 次点击
    这是一个创建于 940 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近刚接触 python,想请问下:

    在处理一堆 list 类型数据的时候,有没有办法在不提前定义出空 list 的时候,根据需求凭空创建出一堆名字自动生成出来的 list 呢?

    比方说我搜到的所谓的列表生成往往是这样的
    # 举例:a = [1,2,3] b = [ 'A' , 'B' , 'C' ] 生成 ls = [ 'A1' , 'B2' , 'C3 ']
    a = [1, 2, 3]
    b = ['A', 'B', 'C']
    ls = []
    # 获取 0,1,2,用作原始列表的下标,索引原始列表的元素,以便于操作
    for i in range(0, 3):
    # int 和 str 不能直接拼接,先将 int 转为 str
    x = b[i] + str(a[i])
    ls.append(x)
    print(ls)

    在提前定义出 ls = []后,利用 for 之类的功能往里面塞东西.
    而当我有很多列表时,想凭借任意两个列表的组合创造出一个新列表的时候有没有方法不去手动创建,而是写一个方法像是:
    def create_new_list(list1,list2)

    新列表的名字命名规则像是: "newlist_from_"+list1+list2
    这里的 list1 与 list2 就是 def create_new_list(list1,list2)里面两个 list 的名字
    然后这个新列表内包含像是 newlist_from_list1+list2 = [(list1[0]+list2[0]),(list1[1]+list2[1])...]

    第一次问这种抽象编程问题不太好表达 不知道能不能让人理解
    11 条回复    2021-09-06 19:25:05 +08:00
    sunrisewestern
        1
    sunrisewestern  
       2021-08-31 02:46:52 +08:00
    ls = [ str(b[i])+str(a[i]) for i in range(len(a)) ]
    alfina
        2
    alfina  
    OP
       2021-08-31 02:50:52 +08:00
    @sunrisewestern 有办法根据需求自定义这个 ls 吗
    sunrisewestern
        3
    sunrisewestern  
       2021-08-31 02:56:54 +08:00
    @alfina 没懂你意思,这个方法其实也是创建新的 list 然后再往里面填元素,只是在一行实现了罢了
    alfina
        4
    alfina  
    OP
       2021-08-31 03:14:12 +08:00
    @sunrisewestern
    如果我的理解没错的话 这里的 ls 代表一个指向它背后实际值( [ str(b[i])+str(a[i]) for i in range(len(a)) ])的路径名称
    但我上面提的例子和你的这个都是把这个路径的名称先手动定义出来
    我可以叫他 ls,ts,zs,...只要符合规则允许啥都可以,
    但这是我们人肉操作定义出来的 有没有办法让电脑去定义这个路径 (根据代码的命名规则自动生成 )然后为它定义的这些不同路径分配不同的值
    Jwyt
        5
    Jwyt  
       2021-08-31 08:21:51 +08:00
    def create_new_list(list1,list2)
    你自己把这个写了不就好了?
    ila
        6
    ila  
       2021-08-31 08:21:52 +08:00
    两个方法:
    1,globals 里增加。
    2,eval 。
    jmc891205
        7
    jmc891205  
       2021-08-31 09:07:26 +08:00
    或者用 globals
    或者你把所有 list 存在一个 dict 里面,用它们的变量名做 key 。然后把这个 dict 也传到你的 create_new_list 里面
    Outliver0
        8
    Outliver0  
       2021-08-31 10:15:41 +08:00
    @alfina 你这个需求的应用场景是什么 为什么要自动给变量名字
    aloxaf
        9
    aloxaf  
       2021-08-31 10:25:23 +08:00   ❤️ 2
    这种扭曲的需求通常都是不会用 dict 导致的
    craiiz
        10
    craiiz  
       2021-08-31 18:14:41 +08:00
    刚学编程的时候也想过这样的问题,但后来真没发现需要这么做的场景。是在要这样,你可以用 eval,或者用 dict
    imn1
        11
    imn1  
       2021-09-06 19:25:05 +08:00
    就是写个闭包啰,我写得多了
    def create(lista, listb): return [f'{x[0]}{x[1]}' for x in zip(lista,listb)]

    例如 opencv,我来来去去用的都是那几个函数,参数也固定,每次都去查 opencv 的手册累得慌,干脆就写个闭包,把几个函数和参数组合在一起,以后直接扔两个变量过去就行了,闭包内部识别转换,不用再研究是 color 还是 gray
    这样的事情还有 pandas 、sklearn 、sqlite 等等,那些手册都是一整本书啊,不可能全记住,也不想每次花时间查,写个闭包就记住两三个传入变量就好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5479 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:06 · PVG 17:06 · LAX 02:06 · JFK 05:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.