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

2021-08-31 02:40:27 +08:00
 alfina
最近刚接触 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])...]

第一次问这种抽象编程问题不太好表达 不知道能不能让人理解
1586 次点击
所在节点    Python
11 条回复
sunrisewestern
2021-08-31 02:46:52 +08:00
ls = [ str(b[i])+str(a[i]) for i in range(len(a)) ]
alfina
2021-08-31 02:50:52 +08:00
@sunrisewestern 有办法根据需求自定义这个 ls 吗
sunrisewestern
2021-08-31 02:56:54 +08:00
@alfina 没懂你意思,这个方法其实也是创建新的 list 然后再往里面填元素,只是在一行实现了罢了
alfina
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
2021-08-31 08:21:51 +08:00
def create_new_list(list1,list2)
你自己把这个写了不就好了?
ila
2021-08-31 08:21:52 +08:00
两个方法:
1,globals 里增加。
2,eval 。
jmc891205
2021-08-31 09:07:26 +08:00
或者用 globals
或者你把所有 list 存在一个 dict 里面,用它们的变量名做 key 。然后把这个 dict 也传到你的 create_new_list 里面
Outliver0
2021-08-31 10:15:41 +08:00
@alfina 你这个需求的应用场景是什么 为什么要自动给变量名字
aloxaf
2021-08-31 10:25:23 +08:00
这种扭曲的需求通常都是不会用 dict 导致的
craiiz
2021-08-31 18:14:41 +08:00
刚学编程的时候也想过这样的问题,但后来真没发现需要这么做的场景。是在要这样,你可以用 eval,或者用 dict
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 等等,那些手册都是一整本书啊,不可能全记住,也不想每次花时间查,写个闭包就记住两三个传入变量就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/798953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX