使用 python,我如何确定一个字符串是否包含除另一个列表中的字符之外的任何字符
With python, how do I find out if a string contains anything characters besides characters in another list
我有一个字符列表:
example_list = ['a','b','c','1','2','3']
我正在 运行 迭代地遍历 pandas 数据框中的一列,并评估是否存在某些问题。让我们通过值调用 column/list I am 运行。我正在查看的值的示例:
value1 = ['a12']
value2 = ['d88']
value3 = ['b33']
值 1 和 3 是正确的,因为它们仅由 example_list 中的元素组成。我想要的是将 value2 标记为 False,将 1 和 3 等值标记为 True。
我尝试过的:
not any(x in example_list for x in value)
这似乎总是 return 正确。使用 all() 方法将查看是否所有内容都在其中,而 any() 将查找其中是否有任何内容,是吗?我正在寻找一种“除 x 之外的任何方法”方法。我是 python 的新手,所以我认为这是一个“我不知道,我不知道”的情况,有人有什么建议吗?谢谢!
如果我没理解错的话,每一行都包含一个包含单个元素的列表:
df = pd.DataFrame({'value': [['a12'], ['d88'], ['b33']]})
example_list = ['a','b','c','1','2','3']
print(df)
value
0 [a12]
1 [d88]
2 [b33]
然后你可以使用列表理解:
df['check'] = [True if set(x[0]).issubset(set(example_list)) else False for x in df['value']]
我们正在检查第一个元素的集合(在您的情况下是单个值)是否是 example_list 和 return 集合的子集 True。不满足条件时 return 为 False。
输出:
value check
0 [a12] True
1 [d88] False
2 [b33] True
让我知道这是否不是您的意思,或者提供一些简单的输入作为数据框。
s = pd.Series(["a12", "d88", "b33"])
l = "".join(example_list)
>>> s
0 a12
1 d88
2 b33
dtype: object
>>> l
'abc123'
>>> s.apply(set(l).issuperset)
0 True
1 False
2 True
dtype: bool
您的 values
是字符串列表。这意味着,在每种情况下,您都检查完整字符串(如“a12”)是否包含在单个字符列表中=>这是永远不会是真的。
如果你不想改变values
,你可以索引第一个字符串,然后遍历这个字符串的字母:
all(x in example_list for x in value1[0]) # => True
all(x in example_list for x in value2[0]) # => False
all(x in example_list for x in value3[0]) # => True
以下是您开始时的有效解决方案:
example_list = ['a', 'b', 'c', '1', '2', '3']
value1 = ['a12']
value2 = ['d87']
value3 = ['b33']
result=all(list(map(lambda x : True if x in example_list else False, *value2)))
print(result)
*value2 适用于列表内容,因此它是一个字符串
*all用于测试每个字符属于example_list
我有一个字符列表:
example_list = ['a','b','c','1','2','3']
我正在 运行 迭代地遍历 pandas 数据框中的一列,并评估是否存在某些问题。让我们通过值调用 column/list I am 运行。我正在查看的值的示例:
value1 = ['a12']
value2 = ['d88']
value3 = ['b33']
值 1 和 3 是正确的,因为它们仅由 example_list 中的元素组成。我想要的是将 value2 标记为 False,将 1 和 3 等值标记为 True。
我尝试过的:
not any(x in example_list for x in value)
这似乎总是 return 正确。使用 all() 方法将查看是否所有内容都在其中,而 any() 将查找其中是否有任何内容,是吗?我正在寻找一种“除 x 之外的任何方法”方法。我是 python 的新手,所以我认为这是一个“我不知道,我不知道”的情况,有人有什么建议吗?谢谢!
如果我没理解错的话,每一行都包含一个包含单个元素的列表:
df = pd.DataFrame({'value': [['a12'], ['d88'], ['b33']]})
example_list = ['a','b','c','1','2','3']
print(df)
value
0 [a12]
1 [d88]
2 [b33]
然后你可以使用列表理解:
df['check'] = [True if set(x[0]).issubset(set(example_list)) else False for x in df['value']]
我们正在检查第一个元素的集合(在您的情况下是单个值)是否是 example_list 和 return 集合的子集 True。不满足条件时 return 为 False。
输出:
value check
0 [a12] True
1 [d88] False
2 [b33] True
让我知道这是否不是您的意思,或者提供一些简单的输入作为数据框。
s = pd.Series(["a12", "d88", "b33"])
l = "".join(example_list)
>>> s
0 a12
1 d88
2 b33
dtype: object
>>> l
'abc123'
>>> s.apply(set(l).issuperset)
0 True
1 False
2 True
dtype: bool
您的 values
是字符串列表。这意味着,在每种情况下,您都检查完整字符串(如“a12”)是否包含在单个字符列表中=>这是永远不会是真的。
如果你不想改变values
,你可以索引第一个字符串,然后遍历这个字符串的字母:
all(x in example_list for x in value1[0]) # => True
all(x in example_list for x in value2[0]) # => False
all(x in example_list for x in value3[0]) # => True
以下是您开始时的有效解决方案:
example_list = ['a', 'b', 'c', '1', '2', '3']
value1 = ['a12']
value2 = ['d87']
value3 = ['b33']
result=all(list(map(lambda x : True if x in example_list else False, *value2)))
print(result)
*value2 适用于列表内容,因此它是一个字符串 *all用于测试每个字符属于example_list