Python:不按字典顺序排序字符串数字(Python: sorting string numbers not lexicographically)
我有一个字符串数组,如:
numbers = ['10', '8', '918', '101010']
当我使用sorted(numbers) ,我按字典顺序排序,例如'8' > '17' 。
如何迭代根据数值排序的字符串?
I have an array of string-numbers, like:
numbers = ['10', '8', '918', '101010']
When I use sorted(numbers), I get them sorted lexicographically, e.g. '8' > '17'.
How can I iterate over the strings sorted according to the number value?
原文:https://stackoverflow.com/questions/35728760
更新时间:2019-12-08 03:29
最满意答案
您可以使用带有键int的内置sorted()函数将列表中的每个项映射到整数之前的整数:
numbers = ['10', '8', '918', '101010']
numbers = sorted(numbers, key=int)
print(numbers)
产量
['8', '10', '918', '101010']
使用此方法将根据需要输出字符串列表。
You can use the built-in sorted() function with a key int to map each item in your list to an integer prior to comparison:
numbers = ['10', '8', '918', '101010']
numbers = sorted(numbers, key=int)
print(numbers)
Output
['8', '10', '918', '101010']
Using this method will output a list of strings as desired.
2016-03-01
相关问答
您可以使用带有键int的内置sorted()函数将列表中的每个项映射到整数之前的整数: numbers = ['10', '8', '918', '101010']
numbers = sorted(numbers, key=int)
print(numbers)
产量 ['8', '10', '918', '101010']
使用此方法将根据需要输出字符串列表。 You can use the built-in sorted() function with a key int to map
...
您可以使用自定义排序功能,如下所示: var numbers = ['1', '1-', '1+', '2', '2+', '2-', '10'];
numbers.sort(function (a, b){
var _a = parseFloat(a), // If the values are integers only, parseInt will do too
_b = parseFloat(b);
if (_a - _b === 0) {
...
不要只是 return [self.name compare:otherObject.name options:(NSCaseInsensitiveSearch)];
但是做一些额外的检查,例如,如果self.name以非数字开头,而otherObject.name以数字开头,则返回NSDescendingOrder,反之亦然。 IOW,制作一个数字>非数字。 如果两者都是非数字或两者都是数字,则返回已有的数字。 这个小控制台程序解释了我的意思: #import
...
versions = [ "1.0.4", "1.0.6", "1.0.11", "1.1.9", "1.1.10", "1.0.16" ]
sorted = versions.sort_by {|s| s.split('.').map(&:to_i) }
sorted # => ["1.0.4", "1.0.6", "1.0.11", "1.0.16", "1.1.9", "1.1.10"]
它所做的就是将字符串拆分成组件并进行数字比较。 versions = [ "1.0.4", "1.0.
...
如果你在pch = strtok(s,“,.-”)之后尝试打印你的字符串,你会注意到你的字符串被打破了。 这是因为strtok()具有破坏性并将字符串分解为标记,因此您需要在调用strtok()之前计算空格的数量: printf("enter the string\n");
gets(s);
for (i = 0;s[i] != '\0';i++)
{
if (s[i] == ' ')
count++;
}
...
返回的值并不重要,因为compareTo契约要返回负数,正数或0(正如您所知)。 但是,如果您真的想了解为什么在比较Dog和cat (或任何其他字符串)时返回-31那么您可以直接在String类中查看该方法: public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1,
...
您可以按字符串的前两个字符排序,或者此类事物。 假设M=100 ,所以你应该将字符划分为sqrt(M)区域,每个区域应该指向另一个sqrt(M)区域,然后对于你得到的每个字符串,你可以比较第一个字符来决定哪个区域到将字符串指向第二个字符串,再次表示第二个字符串,例如带有作为叶子的桶和作为节点的比较的树。 You can sort by first two chars of a string, or something of this sort. Let's say that M=100, so y
...
您应该将Compare函数作为set的构造函数参数传递以实现此效果。 bool compare(string s1, string s2)
{
if(s1.size() == s2.size()) return s1 < s2;
return s1.size() < s2.size();
}
根据您的小规则更改上述功能。 这里的实例 或者您可以将比较函数类作为模板化参数传递。 struct cmp {
bool operator ()(const string &s1, cons
...
试试这样: 首先,我使用声明的表变量作为测试场景的**模型*。 CTE将切断连字符处的数字。 然后分别对两个部分使用数字排序。 DECLARE @tbl TABLE(StringNumber VARCHAR(10));
INSERT INTO @tbl VALUES
('1-1')
,('1-2')
,('1-11')
,('1-12')
,('1-21');
WITH Parted AS
(
SELECT LEFT(StringNumber,pos.Hyph-1) AS PartOn
...
这样做的一种方法是: 拆分字符串并获取数字向量 从字符串转换为整数 对数字排序 Python中的示例代码可以解决这个问题: original_string = '12 3 4 5'
splitted = original_string .split() #splitting
numeric_splitted = [int(numeric_string) for numeric_string in splitted] #casting
numeric_splitted.sort() #sorting
...