我希望在字符串内部查找子字符串列表,并接收子字符串出现在该字符串中的次数。
list = ['one', 'two', 'three']
str = "one one two four five six"
count = str.count(list)
所以在这个例子中,count应该是3.但是,.count()由于某种原因无法从列表中读取字符串,所以我不知道如何解决这个问题。
答案 0 :(得分:3)
一种方法是将str.split()
与生成器表达式一起使用,并使用str_set = {'one', 'two', 'three'}
x = 'one one two four five six'
count = sum(i in str_set for i in x.split())
print(count) # 3
进行O(1)查找。 bool
将您的字符串拆分为一个列表,用空格分隔。
int
这可行的原因是True
是list
的子类,因此我们可以将str
个元素求和,就像它们是整数一样。
请注意,您有一个列表和字符串,不涉及元组。此外,请勿在课程后命名变量(例如set
,data.refetch
,onRefresh
)。
答案 1 :(得分:0)
我认为你想要的是以下
count = sum([str.count(e) for e in tup))
sums
substring
中tup
str
出现的tuple
次list
。
此外,您的tuple
是(
。要使其成为('one', 'two', 'three')
(不可变),请使用str_
str
此外,您应该使用变量名org.osgi.service.component.annotations
(标准python约定)来避免重载public class PostServiceTest {
@Rule
public AemContext context = new AemContext((AemContextCallback) context -> {
context.registerInjectActivateService(new PostService());
}, ResourceResolverType.RESOURCERESOLVER_MOCK);
@Test
public void shouldFetchRandomPosts() {
final PostService postsService = context.getService(PostService.class);
final List<Post> posts = postsService.randomPosts(100);
assertEquals(100, posts.size());
}
}
对象。
答案 2 :(得分:0)
使用生成器表达式和public class Partitioner<E> implements Iterator<List<E>> {
private final Iterator<E> iterator;
private final int partitionSize;
public static <T> Stream<List<T>> partition(final Stream<T> stream, final int partitionSize) {
return new Partitioner<>(stream, partitionSize).asStream();
}
public Partitioner(final Stream<E> stream, final int partitionSize) {
this(stream.iterator(), partitionSize);
}
public Partitioner(final Iterator<E> iterator, final int partitionSize) {
this.iterator = iterator;
this.partitionSize = partitionSize;
}
@Override
public boolean hasNext() {
return this.iterator.hasNext();
}
@Override
public List<E> next() {
if (!hasNext()) {
throw new NoSuchElementException("No more elements");
}
final ArrayList<E> result = new ArrayList<>(this.partitionSize);
for (int i = 0; i < this.partitionSize && hasNext(); i++) {
result.add(this.iterator.next());
}
return result;
}
public Stream<List<E>> asStream() {
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(this, Spliterator.NONNULL), false);
}
}
:
{{1}}