1
hutoer 2022-01-10 20:07:22 +08:00 2
|
2
ADMlN 2022-01-10 23:54:40 +08:00 1
比如:
A={i:'' for i in range(1,41)} B=['zhangsan','lisi','wanger','mazi'] A.update({2**(i+2):b for i,b in enumerate(B)}) |
3
hackpro 2022-01-11 00:13:49 +08:00 via iPhone
挺有意思的问题
|
4
AX5N 2022-01-11 01:32:52 +08:00
如果用你熟悉的语言,你会怎么优雅地实现?
|
5
soo2 2022-01-11 02:33:59 +08:00 via iPhone 1
(看到 Wanger 笑了。)
|
6
rpman 2022-01-11 02:44:37 +08:00
港真循环挺好的
嫌弃的话可以用 map |
7
seers 2022-01-11 08:03:00 +08:00 via Android
迭代器
|
8
raptor 2022-01-11 10:41:34 +08:00 2
不怕麻烦的话,pandas 了解一下?
A 和 B 转为 pandas.DataFrame B['id'] = [2 ** (id + 1) for id in A['id']] A.set_index(["id"], inplace=True) A.update(B.set_index(['id'])) A.reset_index(inplace=True) |
9
imn1 2022-01-11 12:17:40 +08:00
我简单理解你的描述,A 的 id/name 两列都可以重复的(不重复也没必要循环了),B 是各自独立不重复的
其实这个取决于 A 的格式 二维 list --> 循环 /map/lambda ,list 也没办法优雅,即使用 map 也是要执行写入时循环一遍 pandas --> mask() sql --> sql 命令 B 可以用 1.enum ,如果 B 为整数递增就 IntEnum ,如果 B 为二进制整数递增就 IntFlag 2.以数值做 key 的字典 3.pandas.Series 或 numpy 4.以位置作为索引的列表,无值的位置填入 None 当然 1 是最简单,因为 enum 可以用 key 读取 value ,也可以用 value 读取 key ,字典只能从 key 读取 value ,所以只能用数值作为 key 如果 A 是 sql ,B 可以继承 enum 并自定义一个__conform__(self, protocol)方法,方便读取|写入数据库 |
10
Telegram 2022-01-11 13:18:13 +08:00
临时用一次的就别考虑优雅了,能实现就行,浪费时间。
如果以后经常要用到,那倒是可以花点时间优化下方案。 |
11
liuxingdeyu 2022-01-11 13:38:59 +08:00
优雅除了更高逼格的写法,还要尽量不牺牲代码的可阅读性
|