Индексировать строку по символу

Мне нужно определить наиболее часто встречающийся символ списка строк по каждому индексу в Python.

Пример

list1 = ['один', 'два', 'близнец', 'кто']

наиболее часто встречающийся символ между всеми строками с индексом 0 - это 't' наиболее часто встречающийся символ между всеми строками в индексе 1 — «w» наиболее часто встречающийся символ между всеми строками в индексе 2 — «о» наиболее частым символом между всеми строками с индексом 3 является «n» (потому что в индексе 3 есть только один символ).

из этого я хочу создать окончательную строку 'twon', которая показывает наиболее частый символ всех строк по каждому индексу.

как я могу выполнить это на python без импорта какой-либо библиотеки? спасибо

Пожалуйста, поделитесь кодом, с которым вы пробовали, тогда мы сможем помочь вам устранить любые проблемы, которые могут возникнуть у вас.

user56700 11.11.2022 09:01
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
6
1
100
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

from collections import Counter

list1 = ['one', 'two', 'twin', 'who']

idx =0  #t 
print(Counter(list(zip(*[i for i in list1 if len(i)>3]))[idx]).most_common()[0][0])

без импорта каких-либо библиотек

list1 = ['one', 'two', 'twin', 'who']

idx =0  #t 
l = list(list(zip(*[i for i in list1 if len(i)>3]))[idx])
print(max(set(l), key = l.count))

Есть проблема с zip: он считает, что все элементы имеют одинаковую длину. поэтому для индекса 3 это не удается

Hamid Rasti 11.11.2022 10:00

да, это работает только для первых трех индексов, в последнем индексе написано «IndexError: индекс списка вне диапазона»

nuovo2000ita 11.11.2022 10:09

может быть, с помощью словаря?

nuovo2000ita 11.11.2022 10:35

@HamidRasti ты прав, я изменил свой ответ

Dmitriy Neledva 11.11.2022 13:41
Ответ принят как подходящий
from itertools import zip_longest

list1 = ['one', 'two', 'twin', 'who']

chars = {}
for i, item in enumerate(zip_longest(*list1)):
    set1 = set(item)
    if None in set1:
        set1.remove(None)
    chars[i] = max(set1, key=item.count)

Без импорта какой-либо библиотеки:

list1 = ['one', 'two', 'twin', 'who']

width = len(max(list1, key=len))

chars = {}

for i, item in enumerate(zip(*[s.ljust(width) for s in list1])):
    set1 = set(item)
    if ' ' in set1:
        set1.remove(' ')
    chars[i] = max(set1, key=item.count)

Вывод:

chars

{
  0: 't',
  1: 'w',
  2: 'o', 
  3: 'n'
}

"".join(chars.values())

'twon'

Как я могу сделать то же самое без импорта какой-либо библиотеки? спасибо

nuovo2000ita 11.11.2022 10:08

@nuovo2000ita Я добавил версию without importing!

Hamid Rasti 11.11.2022 11:58

Вы также можете использовать исходное решение с for i, item in enumerate(zip(*[s.ljust(width) for s in list1])):, с width = max(len(s) for s in list1), а затем заменить None на " ".

Timus 11.11.2022 12:33

@ Тимус Хорошая идея! Я отредактировал свой код. кроме того, мы можем использовать map вместо понимания списка, например: map(lambda s: s.ljust(width), list1)

Hamid Rasti 11.11.2022 12:59

этот метод выглядит великолепно, я просто хотел бы ускорить его выполнение. Должен ли я что-то изменить в коде, который вы разместили в решении? спасибо

nuovo2000ita 12.11.2022 09:49

@nuovo2000ita Вы можете использовать map without lambda! вместо list comprehension. это может быть быстрее: понимание списка против карты

Hamid Rasti 12.11.2022 10:16

как бы вы написали код без лямбды в приведенном выше примере?

nuovo2000ita 12.11.2022 11:44

Мне нужно время и получить некоторые тесты из кода. но, основываясь на этом ответе SO: вы можете заменить zip(*[s.ljust(width) for s in list1]) на zip(*map(lambda s: s.ljust(width), list1)) и улучшить время выполнения. @nuovo2000ita

Hamid Rasti 13.11.2022 12:47

Другие вопросы по теме