如何批量将两个等长列表的对应元素按指定格式拼接
如何批量将两个等长列表的对应元素按指定格式拼接
嘿,这个问题其实很好解决!你不用再手动写u[0]:n[0]这种重复代码了,Python里的zip()函数就是专门干这种对应配对的活儿的,刚好能完美匹配你的需求——毕竟你已经确认两个列表长度始终一致。
最简洁的实现方法:列表推导式 + zip
直接用zip(u, n)把两个列表里的对应元素一一配对,再通过列表推导式批量拼接成你要的格式:
# 替换你原来的k.append(...)这行代码 k = [f"{user_id}:{username}" for user_id, username in zip(u, n)]
原理说明:
zip(u, n)会把u和n中位置相同的元素打包成元组,比如(u[0], n[0])、(u[1], n[1])……直到遍历完所有元素。- 列表推导式会逐个遍历这些元组,把每个元组里的ID和用户名按
{ID}:{用户名}的格式拼接成字符串,最终生成完整的k列表,不管你的列表有几千甚至几万个元素都能一次性处理。
如果需要直接写入文件(大规模数据更高效)
要是你最终想把结果保存到文件里,还可以用生成器表达式配合join(),这样不用先生成完整列表,内存占用更低:
# 生成所有拼接后的字符串,用换行符分隔 result_str = '\n'.join(f"{user_id}:{username}" for user_id, username in zip(u, n)) # 写入文件 with open("output.txt", "w") as f: f.write(result_str)
结合你原代码的完整优化版本
把这个方法整合到你原来的代码里,完整代码大概是这样:
import re import requests t = [] u = [] n = [] exclude_banned = True with open("u.txt", "r") as f: # 读取前100行(你也可以改成读取全部:f.readlines()) h = f.readlines()[0:100] for sub in h: # 去掉换行符 t.append(re.sub('\n', '', sub)) # 请求Roblox API r = requests.post('https://users.roblox.com/v1/usernames/users', json={'usernames': t, 'excludeBannedUsers': exclude_banned}) y = r.json()['data'] # 提取ID和用户名 u.extend([f['id'] for f in y]) n.extend([f['name'] for f in y]) # 批量拼接成目标格式 k = [f"{user_id}:{username}" for user_id, username in zip(u, n)] print(k)
这样不管你的列表有多长,都能轻松完成批量拼接,再也不用手动写一个个索引啦!
备注:内容来源于stack exchange,提问作者Notepad noobb
相关产品推荐
相关产品推荐

