Dhr*_*ati 3 python random numpy set python-2.7
我有大量的标签,我通过以下方式使其独一无二:
unique_train_labels = set(train_property_labels)
Run Code Online (Sandbox Code Playgroud)
打印出来为set([u'A', u'B', u'C']). 我想创建一组新的独特标签,其中包含一个名为“no_region”的新标签,并且正在使用:
unique_train_labels_threshold = unique_train_labels.add('no_region')
Run Code Online (Sandbox Code Playgroud)
然而,这打印出来的是None.
我的最终目标是使用这些独特的标签稍后通过以下方式生成随机的分类标签数组:
rng = np.random.RandomState(101)
categorical_random = rng.choice(list(unique_train_labels), len(finalTestSentences))
categorical_random_threshold = rng.choice(list(unique_train_labels_threshold), len(finalTestSentences))
Run Code Online (Sandbox Code Playgroud)
从文档中它说set.add()应该生成一个新的集合,但情况似乎并非如此(因此我以后无法调用list(unique_train_labels_threshold))
正如摩西的回答中提到的,该set.add方法会改变原始集合,但不会创建新集合。在 Python 中,执行就地突变的方法通常会返回None;所有内置可变类型的方法都这样做,并且第三方库通常遵守该约定。
使用该方法的另一种.copy方法是使用该.union方法,该方法返回一个新集合,该新集合是原始集合与作为参数提供的集合的并集。对于集合,| or运算符调用该.union方法。
a = {1, 2, 3}
b = a.union({5})
c = a | {4}
print(a, b, c)
Run Code Online (Sandbox Code Playgroud)
输出
{1, 2, 3} {1, 2, 3, 5} {1, 2, 3, 4}
Run Code Online (Sandbox Code Playgroud)
该.union方法(就像其他可以通过运算符语法调用的 set 方法一样)比运算符语法有一点优势:您可以为其参数传递任何可迭代对象;运算符版本要求您将参数显式转换为集合(或冻结集合)。
a = {1, 2, 3}
b = a.union([5, 6])
c = a | set([7, 8])
print(a, b, c)
Run Code Online (Sandbox Code Playgroud)
输出
{1, 2, 3} {1, 2, 3, 5, 6} {1, 2, 3, 7, 8}
Run Code Online (Sandbox Code Playgroud)
使用显式.union方法在这里稍微更有效,因为它绕过了将 arg 转换为集合:在内部,该方法只是迭代 arg 的内容,将它们添加到新集合中,因此它不关心 arg 是否是一个集合、列表、元组、字符串或字典。
来自官方Python集合文档
请注意,union()、intersection()、difference() 和 symmetry_difference()、issubset() 和 issuperset() 方法的非运算符版本将接受任何可迭代对象作为参数。相反,基于运算符的对应部分需要设置其参数。这排除了像 set('abc') 和 'cbs' 这样容易出错的结构,有利于更具可读性的 set('abc').intersection('cbs')。
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |