Как сообщается Азиз Альто filter(None, lstr)
не удаляет пустые строки с пространством ' '
, но если вы уверены, что lstr содержит только строку, вы можете использовать filter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Сравнить время на моем компьютере
>>> from timeit import timeit
>>> timeit('" ".join(lstr).split()', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
3.356455087661743
>>> timeit('filter(str.strip, lstr)', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
5.276503801345825
Самое быстрое решение для удаления ''
и пустых строк с пробелом ' '
остается ' '.join(lstr).split()
.
Как сообщалось в комментарии ситуация другая, если ваши строки содержат пробелы.
>>> lstr = ['hello', '', ' ', 'world', ' ', 'see you']
>>> lstr
['hello', '', ' ', 'world', ' ', 'see you']
>>> ' '.join(lstr).split()
['hello', 'world', 'see', 'you']
>>> filter(str.strip, lstr)
['hello', 'world', 'see you']
Вы можете видеть, что filter(str.strip, lstr)
сохраняет строки с пробелами на нем, но ' '.join(lstr).split()
разделит эти строки.
new Guid(string)
Вы могли также посмотреть на использование TypeConverter
.
Это получит Вас достаточно близкий, и я использую его в производстве и никогда не имел коллизии. Однако при рассмотрении конструктора для гуида в отражателе Вы будете видеть все проверки, которые он осуществляет.
public static bool GuidTryParse(string s, out Guid result)
{
if (!String.IsNullOrEmpty(s) && guidRegEx.IsMatch(s))
{
result = new Guid(s);
return true;
}
result = default(Guid);
return false;
}
static Regex guidRegEx = new Regex("^[A-Fa-f0-9]{32}$|" +
"^({|\\()?[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}(}|\\))?$|" +
"^({)?[0xA-Fa-f0-9]{3,10}(, {0,1}[0xA-Fa-f0-9]{3,6}){2}, {0,1}({)([0xA-Fa-f0-9]{3,4}, {0,1}){7}[0xA-Fa-f0-9]{3,4}(}})$", RegexOptions.Compiled);
К сожалению, нет TryParse () эквивалентен. Если Вы создаете новый экземпляр Системы. Гуид и передача строковое значение в, можно поймать три возможных исключения, которые это выдало бы, если это недопустимо.
Те:
я видел некоторые реализации, где можно сделать regex на строке до создания экземпляра, если Вы просто пытаетесь проверить его и не создать его.
Если все, что вам нужно, это простейшая проверка ошибок, вы можете просто проверить длину строки.
string guidStr = "";
if( guidStr.Length == Guid.Empty.ToString().Length )
Guid g = new Guid( guidStr );