You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制域名生成器输出数量并随机化结果?

解决Python域名生成脚本的随机化与数量限制问题

核心思路

  • 先读取词汇文件生成完整的域名候选列表(或生成迭代器后转列表)
  • 对列表执行随机打乱操作,打破itertools默认的有序生成逻辑
  • 通过列表切片截取指定数量的结果输出

完整代码示例

import itertools
import random

# 1. 读取Combined.txt中的词汇,过滤空行和无效字符
with open('Combined.txt', 'r', encoding='utf-8') as f:
    words = [line.strip() for line in f if line.strip()]

# 2. 生成域名组合(以两两不重复组合为例,可按需调整)
# 若需要允许重复的组合,替换为itertools.product(words, repeat=2)
domain_candidates = [f"{w1}{w2}.co.id" for w1, w2 in itertools.combinations(words, 2)]

# 3. 随机打乱候选列表(这一步是解决有序问题的关键)
random.shuffle(domain_candidates)

# 4. 限制输出数量为100个,若候选总数不足则返回全部
limited_domains = domain_candidates[:100]

# 5. 在Jupyter Notebook中展示结果
for domain in limited_domains:
    print(domain)

关键细节说明

  • 读取文件时过滤空行:避免因文件中的空白行生成无意义的域名
  • 选择合适的itertools方法:
    • itertools.combinations(words, n):生成不重复的n个词汇组合(如abc+def,不会出现def+abc)
    • itertools.product(words, repeat=n):生成允许重复的n个词汇组合(如abc+abc、abc+def和def+abc都会生成)
    • 可自行调整n的值来生成不同长度的域名组合
  • 随机化失效的原因:itertools生成的是有序迭代器,必须先转换为列表再执行random.shuffle(),直接对迭代器操作无法实现打乱效果
  • 数量限制逻辑:通过[:100]切片直接截取前100个结果,若候选总数不足100则自动返回全部内容

内存优化方案(针对大词汇量场景)

如果Combined.txt词汇量极大,生成完整候选列表会占用过多内存,可改用随机抽样方式:

import itertools
import random

with open('Combined.txt', 'r', encoding='utf-8') as f:
    words = [line.strip() for line in f if line.strip()]

# 生成迭代器而非列表,节省内存
domain_iter = (f"{w1}{w2}.co.id" for w1, w2 in itertools.combinations(words, 2))

# 转换为列表后随机抽取100个(若总数不足则返回全部)
domain_list = list(domain_iter)
limited_domains = random.sample(domain_list, min(100, len(domain_list)))

for domain in limited_domains:
    print(domain)

内容的提问来源于stack exchange,提问作者Tsukuru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:25:16