in operator lets us check if a character is in a string. However, can the
in operator be used to get the specific index of duplicate characters?
in operator will usually return True at the first instance that a character appears within a string. It also does not have any way of returning the index where a character was found.
In order to get the indexes of a character that appears within a string, any number of times, one method might be to utilize a for loop iterating through each index, and checking each character for a match.
# We first check that a string contains the character.
# If so, we store the indexes in a list.
string = "xylophone"
target = "o"
is_contained = target in string
indexes = 
for index in range(len(string)):
if string[index] == target:
print(indexes) # [3, 6]
does count() work in this?
str.count() returns the number of instances of a substring within a string, but not their indices.
This is the code for the second question in this exercise. What are the deficiencies?
def common_letters(string_one, string_two):
str3 = 
for i in string_one:
if i in string_two and i not in str3:
new_word = print(common_letters("acsac", "bfec"))
It’s inefficient to search through str2 and str3 every letter. Use sets. Better yet, use Counter or set and nothing else.
>>> Counter('acsac') & Counter('bfec')
>>> Counter('acsac') & Counter('bfecc')
>>> set('acsac') & set('bfecc')
In the if statement, I believe you placed the ‘not’ statement incorrectly. The ‘not’ should go before the statement that it should negate, not halfway as you put it.
I think it should be:
if i in string_two and not i in str3:
It’s a subtle difference, but should do the trick.
Just a reminder:
If the exercise ask for a LIST of commons letters between strings, use SET (syntax: set(string_name) & set(string_name2)), this will give you a dictionary of commons letters. After that, use a for loop through the dictionary and add each element in a empty list assigned before.
emptyList = 
for eachElement in listBySet: