从字符串内的列表计数子字符串

时间:2018-05-25 15:55:54

标签: python string list counter

我希望在字符串内部查找子字符串列表,并接收子字符串出现在该字符串中的次数。

list = ['one', 'two', 'three']
str = "one one two four five six"
count = str.count(list)

所以在这个例子中,count应该是3.但是,.count()由于某种原因无法从列表中读取字符串,所以我不知道如何解决这个问题。

3 个答案:

答案 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

这可行的原因是Truelist的子类,因此我们可以将str个元素求和,就像它们是整数一样。

请注意,您有一个列表和字符串,不涉及元组。此外,请勿在课程后命名变量(例如setdata.refetchonRefresh)。

答案 1 :(得分:0)

我认为你想要的是以下

count = sum([str.count(e) for e in tup))

sums substringtup str出现的tuplelist

此外,您的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}}